Python 3.5

Segue-se uma lista de PEPs finalizadas/aceites para o Python 3.5, agrupadas pelo seu impacto no MicroPython.

Extensões à sintaxe

Estado

PEP 448

Generalizações adicionais de desempacotamento

Parcial

PEP 465

Um novo operador de multiplicação matricial

Completo

PEP 492

Corrotinas com sintaxe async e await

Completo

Extensões e alterações ao tempo de execução

PEP 461

Formatação % para cadeias binárias

Completo

PEP 475

Repetição de chamadas de sistema que falham com EINTR

Completo

PEP 479

Alterar o tratamento de StopIteration dentro de geradores

Completo

Alterações à biblioteca padrão

PEP 471

os.scandir()

PEP 485

math.isclose(), uma função para testar igualdade aproximada

Completo

Alterações diversas

PEP 441

Suporte melhorado para aplicações zip em Python

PEP 486

Tornar o Python Launcher ciente de ambientes virtuais

Não relevante

PEP 484

Sugestões de tipo (apenas orientativas)

Completo [1]

PEP 488

Eliminação dos ficheiros PYO

Não relevante

PEP 489

Redesenhar o carregamento de módulos de extensão

Outras alterações à linguagem:

Foi adicionado o gestor de erros namereplace. O gestor de erros backslashreplace funciona agora também com descodificação e tradução.

As docstrings de propriedades são agora editáveis. Isto é especialmente útil para as docstrings de collections.namedtuple()

As importações circulares envolvendo importações relativas são agora suportadas.

Novos módulos:

Alterações aos módulos incorporados:

collections

A classe OrderedDict está agora implementada em C, tornando-a de 4 a 100 vezes mais rápida.

As vistas OrderedDict.items(), OrderedDict.keys(), OrderedDict.values() suportam agora iteração com reversed().

The deque class now defines index(), insert(), and copy(), and supports the + and * operators.

As docstrings produzidas por namedtuple() podem agora ser atualizadas.

A classe UserString implementa agora os métodos __getnewargs__(), __rmod__(), casefold(), format_map(), isprintable() e maketrans() para corresponder aos métodos equivalentes de str.

heapq

A comparação de elementos em merge() pode agora ser personalizada passando uma função key num novo argumento opcional de palavra-chave key, e um novo argumento opcional de palavra-chave reverse pode ser usado para inverter a comparação de elementos

io

Um novo método BufferedIOBase.readinto1() que utiliza no máximo uma chamada aos métodos RawIOBase.read() ou RawIOBase.readinto() do stream bruto subjacente

json

O descodificador JSON levanta agora JSONDecodeError em vez de ValueError para fornecer melhores informações de contexto sobre o erro.

math

Foram adicionadas duas novas constantes ao módulo math: inf e nan.

Completo

Uma nova função isclose() fornece uma forma de testar a igualdade aproximada.

Foi adicionada uma nova função gcd(). A função fractions.gcd() está agora depreciada.

os

Foi adicionada a nova função scandir() que devolve um iterador de objetos DirEntry.

A função urandom() utiliza agora a syscall getrandom() no Linux 3.17 ou mais recente, e getentropy() no OpenBSD 5.6 e mais recente, eliminando a necessidade de utilizar /dev/urandom e evitando falhas devido ao potencial esgotamento de descritores de ficheiro.

As novas funções get_blocking() e set_blocking() permitem obter e definir o modo de bloqueio de um descritor de ficheiro (O_NONBLOCK.)

Existe uma nova função os.path.commonpath() que devolve o sub-caminho comum mais longo de cada nome de caminho passado

re

As referências e referências condicionais a grupos de comprimento fixo são agora permitidas em asserções lookbehind

O número de grupos de captura em expressões regulares já não está limitado a 100.

As funções sub() e subn() substituem agora os grupos não correspondidos por cadeias vazias em vez de levantar uma exceção.

As exceções re.error têm novos atributos, msg, pattern, pos, lineno e colno, que fornecem melhores informações de contexto sobre o erro

socket

As funções com tempos limite utilizam agora um relógio monótono em vez de um relógio de sistema.

Um novo método socket.sendfile() permite enviar um ficheiro através de um socket utilizando a função de alto desempenho os.sendfile() no UNIX, resultando em carregamentos de 2 a 3 vezes mais rápidos do que ao utilizar o simples socket.send()

O método socket.sendall() já não repõe o tempo limite do socket sempre que bytes são recebidos ou enviados. O tempo limite do socket é agora a duração total máxima para enviar todos os dados.

O argumento backlog do método socket.listen() é agora opcional. Por omissão é definido como SOMAXCONN ou 128, o que for menor.

Completo

ssl

Suporte a BIO de memória

Suporte a negociação de protocolo de camada de aplicação (ALPN)

Existe um novo método SSLSocket.version() para consultar a versão efetiva do protocolo em uso.

A classe SSLSocket implementa agora um método SSLSocket.sendfile().

O método SSLSocket.send() levanta agora a exceção ssl.SSLWantReadError ou ssl.SSLWantWriteError num socket não bloqueante se a operação bloquearia. Anteriormente, devolvia 0.

A função cert_time_to_seconds() interpreta agora o tempo de entrada como UTC e não como hora local, de acordo com a RFC 5280. Adicionalmente, o valor de retorno é sempre um int.

Os novos métodos SSLObject.shared_ciphers() e SSLSocket.shared_ciphers() devolvem a lista de cifras enviadas pelo cliente durante o handshake.

Os métodos SSLSocket.do_handshake(), SSLSocket.read(), SSLSocket.shutdown() e SSLSocket.write() da classe SSLSocket já não repõem o tempo limite do socket sempre que bytes são recebidos ou enviados.

A função match_hostname() suporta agora a correspondência de endereços IP.

sys

Uma nova função set_coroutine_wrapper() permite definir um gancho global que será chamado sempre que um objeto de corrotina for criado por uma função async def. A função correspondente get_coroutine_wrapper() pode ser utilizada para obter o wrapper atualmente definido.

Uma nova função is_finalizing() pode ser utilizada para verificar se o interpretador Python está a encerrar.

time

A função monotonic() está agora sempre disponível

Notas