Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Austin Python Meetup 2017: What's New in Pythons 3.5 and 3.6?

1,213 views

Published on

In the talk, the changes introduced in Python 3.5 and Python 3.6 are covered. Primary based on standard documentation, but only my favourite ones are included:

* https://docs.python.org/3/whatsnew/3.3.html
* https://docs.python.org/3/whatsnew/3.6.html

Published in: Software

Austin Python Meetup 2017: What's New in Pythons 3.5 and 3.6?

  1. 1. What's New in Pythons 3.5 and 3.6? Viacheslav Kakovskyi Austin Python Meetup 2017 my favourite features
  2. 2. Me! @kakovskyi Backend Software Technical Lead Python 2 and Twisted → Python 3 and asyncio Share knowledge at Python events ● PyCon Ukraine 2016 ● PyCon Poland 2016 ● KyivPy 2015, WebCamp Ukraine 2016 2
  3. 3. Agenda 1. Syntax changes 2. Library modules 3. Built-in features 4. CPython improvements 5. Standard library improvements 6. Summary 7. Further reading 3
  4. 4. Who uses Python 3 in production? 4
  5. 5. Who uses Python 3 in production? 5
  6. 6. Syntax changes PEP 492 - coroutines with async and await syntax ● async expression used to define coroutine functions ● await is used to suspend coroutine execution until result is available ● implement object.__await__(self) to make your object awaitable 6 Python 3.5 async def http_handler(): users = await get_users_from_db() return '<h1>Online users {}</h1>'.format(len(users))
  7. 7. Syntax changes PEP 448 - additional unpacking generalizations ● * expression used as iterable unpacking operator ● and ** as dictionary unpacking operator 7 Python 3.5 >>> print(*[1], *{2}, 3) 1 2 3 >>> print({'x': 4, **{'y': 5}}) {'x': 4, 'y': 5}
  8. 8. Syntax changes PEP 515 - underscores in numeric literals 8 Python 3.6 >>> 100_500_000 100500000 >>> 0x_DE_AD_BE_AF 3735928495 >>> '{:_}'1.format(100500000) 100_500_000 >>> '{:_x}'1.format(3735928495) 0x_DE_AD_BE_AF
  9. 9. Syntax changes PEP 530 - asynchronous comprehensions ● Now it's possible to use async for in list, set, dict comprehensions and generator expressions ● await and can be used inside the expressions 9 Python 3.6 result = [await fun() for fun in funcs if await condition()]
  10. 10. Library modules typing - support of type hints for static code analysis only for functions PEP 526 - add support of type annotation for variables (Py3.6) ● Any, Awaitable Callable, Collection, Coroutine, ● Dict, FrozenSet, Generator, Iterable, Iterator ● List, NewType, Set, Tuple 10 Python 3.5 def greeting(name: str) -> str: return 'Hello, {}'.format(name)
  11. 11. Built-in features PEP-461 - percent formatting support for bytes and bytearray 11 Python 3.5 >>> b'Hello, %b' % b'Austin!' b'Hello, Austin!'
  12. 12. Built-in features RecursionError is raised when max recursion depth is reached 12 Python 3.5 def recursion(level): # do something awesome return recursion(level+1) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in a File "<stdin>", line 2, in a File "<stdin>", line 2, in a [Previous line repeated 995 more times] RecursionError: maximum recursion depth exceeded
  13. 13. CPython improvements PEP-488 Elimination of PYO files ● .pyo files are never used ● .pyc files are used with explicit declaration of optimization level in filename 13 Python 3.5 '{name}.{cache_tag}.opt-{optimization}.pyc'.format(name=module_name, cache_tag=sys.implementation.cache_tag, optimization=str(sys.flags.optimize))
  14. 14. CPython improvements Compact and ordered dict improvement ● Memory usage is 20% less compared to Python 3.5 ● dict preserves order of insertion now 14 Python 3.6 >>> d = {} >>> d['a'] = 1 >>> d['b'] = 2 >>> d['c'] = 3 >>> d {'a': 1, 'b': 2, 'c': 3}
  15. 15. PEP-487 Simpler customization of class creation ● no metaclasses, I promise you ● __init_subclass__ method will be called on base class when a subclass is created CPython improvements 15 Python 3.6
  16. 16. ● colection.OrderedDict is implemented in C and just faster ● os.scandir() provides faster way for directory traversal ● functools.lru_cache() has been reimplemented in C ● traceback is more handy for devs and faster too Standard library improvements 16 Python 3.5
  17. 17. ● asyncio received new features and considered as stable ● typing has been improved and isn't in provisional state ● tracemalloc provides better output for memory allocation errors ● pathlib has been improved and system path protocol is implemented Standard library improvements 17 Python 3.6
  18. 18. Summary ● Use Python 3, asyncio and aiohttp for networking applications 18
  19. 19. Further reading ● @kakovskyi ○ Maintaining a high load Python project for newcomers ○ Maintaining a high load Python project: typical mistakes ○ Instant messenger with Python. Back-end development ○ How to easily find the optimal solution without exhaustive search using Genetic Algorithms ● @bmwant ○ Asyncio-stack for web development ○ PEP8 is not enough ○ PyInvoke is your replacement for Makefile 19
  20. 20. 20 @kakovskyi viach.kakovskyi@gmail.com Questions?
  21. 21. Senior Platform Developers needed tiny.cc/atlassian_atx 21

×