
6 Июль 2019 , Python, 22973 просмотров, What is new in Python 3.8
Релиз Python 3.8 намечен на октябрь 2019 года, но уже сейчас у каждого есть возможность пощупать набор новых фишек языка. Пока пишу этот пост, на официальном сайте доступна версия python 3.8b2.
Итак, что же нам готовит релиз грядущий?
f-string =
Теперь выводить debug информацию стало ещё проще и красивее. Достаточно в f-string передать знак =:
>> a = 123 >> b = 456 >> print(f’ and ‘) a=123 and b=456
Assignment Expressions или :=, он же walrus operator
Легендарный PEP572 из-за которого Гвидо сложил полномочия диктатора Python. Оператор выполняет присваивание значения переменной в выражении. Например, вам хочется проверить есть ли ключ в словаре, а также присвоить значение этого ключа переменной. В версиях Python до 3.8 необходимо сделать:
params = x = params.get(‘foo’) if x: print(x)
В версии 3.8 код выглядит чуть компактнее:
Учим Python за 1 час! #От Профессионала
params = if x := params.get(‘foo’): print(x)
Positional-only arguments
В python 3 в далёком 2006 году появились keyword-only arguments (PEP3102). Их задача заключается в навязывании передачи аргументов функции или методу по ключу после символа *
def test(a, b, *, key1, key2): pass test(1,2,3,4) Traceback (most recent call last): File «», line 1, in test(1,2,3,4) TypeError: test() takes 2 positional arguments but 4 were given
Интерпретатор сообщает нам, что функция принимает только 2 позиционных аргумента, но передано было 4. Чтобы он не ругался, функцию необходимо вызывать так:
test(1, 2, key1=3, key2=4)
В python 3.8 появилась возможность задавать передачу аргументов исключительно согласно их позиции. В отличие от keyword-only arguments, все аргументы обязаны быть переданы согласно позиции:
def position_only(a, b, c, d=0, /): pass position_only(1, 2, 3) # OK position_only(1, 2, c=3) # вызов такой функции провоцирует исключение Traceback (most recent call last): File «», line 1, in position_only(1,2,c=3) TypeError: position_only() got some positional-only arguments passed as keyword arguments: ‘c’
Общая память для IPC
Для межпроцессорного взаимодействия в python 3.8 появилась общая память.
Раньше, чтобы передавать данные между процессами внутренний механизм подразумевал сериализацию и десериализацию объекта и отправку данных в сокет. С использованием механизма ОС по выделению общей памяти, отпадает необходимость взаимодействия через диск или сокет, а это даёт значительный рост к производительности. В пакете multiprocessing появился модуль shared_memory. Пример использования общей памяти между двумя разными процессами:
from multiprocessing import shared_memory a = shared_memory.ShareableList(range(5)) print(a.shm.name) >>> ‘wnsm_bd6b5302’
Открываем другой shell и считываем данные из общей памяти:
from multiprocessing import shared_memory b = shared_memory.ShareableList(name=’wnsm_bd6b5302′) print(b) >>> ShareableList([0, 1, 2, 3, 4], name=’wnsm_bd6b5302′)
TypedDict
Появилась возможность указывать тип значений у словарей с фиксированным количеством строковых ключей. Например:
Python на практике / Пишем 3 программы на Питон за 5 минут
from typing import TypedDict class Movie(TypedDict): title: str year: int movie: Movie =
Класс Movie можно использовать в аннотациях:
from typing import List def my_function(films: List[Movie]): pass
final
Те, кто знаком с Java сразу понимают что такое final. То, что помечено final не должно изменяться во время жизненного цикла скрипта.
from typing import Final, final birth_year: Final = 1989 birth_year = 1901 # вот тут IDE или type checker вроде mypy должен ругаться
Классы, помеченные декоратором final, не должны быть унаследованы:
Также можно формально запретить переопределение метода в дочернем классе:
Это далеко не все фишечки в новой версии Python. Более подробно о новинках можно узнать по ссылке.
Присоединяйтесь к рассылке
Понравился контент? Пожалуйста, подпишись на рассылку.
Интересные записи:
- FastAPI, asyncio и multiprocessing
- Django Channels: работа с WebSocket и не только
- Обзор Python 3.9
- Почему Python?
- Pyenv: удобный менеджер версий python
- Руководство по работе с HTTP в Python. Библиотека requests
- Работа с MySQL в Python
- Что нового появилось в Django Channels?
- Celery: начинаем правильно
- Введение в logging на Python
- Работа с PostgreSQL в Python
- Введение в pandas: анализ данных на Python
- Авторизация через Telegram в Django и Python
- Разворачиваем Django приложение в production на примере Telegram бота
- Python-RQ: очередь задач на базе Redis
- Как написать Telegram бота: практическое руководство
- Участие в подкасте TalkPython
- Итоги первой встречи Python программистов в Алматы
- Строим Data Pipeline на Python и Luigi
- Видео презентации ETL на Python
Источник: khashtamov.com
Python 3.8: Что нового и как этим пользоваться?
Следующий перевод подготовлен специально для «питонистов», которым интересно наверняка интересно почитать о новых функциях Python 3.8. В преддверии запуска нового потока по курсу «Разработчик Python» мы не смогли пройти мимо этой темы.
В этой статье мы поговорим про новые функциональные возможности, которые были введены в Python 3.8.
Моржовый оператор (Оператор присваивания)
Python 3.8 — Новые возможности языка программирования

Бета-цикл Python 3.8 уже запущен в лице Python 3.8.0b1, который был выпущен 4 июня, за которой вышла следующая бета 4 июля. Это значит, что Python 3.8 уже можно назвать завершенным делом, мы можем с уверенностью начать изучать особенности последнего реализа. Выпуск анонсирован на октябрь, так что пользователям не нужно долго ждать.
Оператор морж (walrus) в Python 3.8
Заглавная особенность Python 3.8, и в то же время — самая спорная. Путь принятия решения о PEP 572 («Assignment Expressions») был довольно ухабистым, что привело к новой модели управления языком.
Представим, что новое правительство готовится заменить давнего доброжелательного диктатора, которого мы с вами знаем всю жизнь, Гвидо ван Россума, после того как он уйдет в отставку из-за беспорядков, связанных с PEP 572 (конфликт между сообществом разработчиков из за добавления нового синтаксиса).
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат https://python-scripts.com/python-3-8-version» target=»_blank»]python-scripts.com[/mask_link]