Python 3.6

Novidades da versão

Me

Underscores em números

>>> 1_000_000_000 == 1000000000
True
>>> 1_00_00_00_00_0
>>> '{:_}'.format(1000000)
'1_000_000'

String literals

>>> name = 'Julio'
>>> f'My name is {name}'
My name is Julio
>>> def f():
...     name = 'Julio'
...     print('My name is {name}'.format(**locals()))

all(list(print(f'{i} bottle{"s" if i != 1 else ""} of '
f'beer on the wall, {str(i).lower()} '
f'bottle{"s" if i != 1 else ""} of beer.\n{"Take one '
f'down pass it around" if str(i).lower() == str(i) '
f'else "Go to the store and buy some more"}, '
f'{i-1 if i not in [1, "No more"] else "no more" '
f'if i == 1 else 99} bottles of beer on the wall.\n') \
for i in list(range(99, 0, -1))+['No more'])) \
or ""
                        

Type annotations

Só pra lembrar...

>>> def(name: str) -> str:
...     return 'Hello ' + name

Não signfica que o CPython valida o parâmetro ou o retorno.

>>> captain: str    # None
>>> values: List[int] = [1, 2, 4]

Essas informações podem ser extraídas de __annotations__ (assim como docstrings podem ser extraídas de __doc__).

secrets

Nova biblioteca para geração de números randômicos "fortes", utilizados para criptografia.

>>> token_hex(16)  
'f9bf78b9a18ce6d46a0cd2b0b86df9da'

Pathlib

Representação de um caminho qualquer no sistema de arquivos.

 import pathlib
>>> with open(pathlib.Path("README")) as f:
...     contents = f.read()
...
>>> import os.path
>>> os.path.splitext(pat)
('some_file', '.txt')

Nova função para tornar objetos Path-like: __fspath()__

Novos "dicionários"

dict agora é mais compacto.

Efeito colateral: agora são ordenados em CPython, mas não no spec da linguagem Python.

  • **kwargs agora são ordenados.
  • __dict__ agora é ordenado.

Async the world!