Рубрики
Без рубрики

Python 3.9: Какие новости?

Python 3.10 приходит, но вы пробовали 3.9? В этой статье я покажу вам крутые новые функции … Помечено новичками, Python, CodeNewie, производительностью.

Python 3.10 приходит, но вы пробовали 3.9? В этой статье я покажу вам классные новые функции, представленные в текущей версии языка программирования Python и дайте вам причины, по которым вы должны быть осторожны при портировании до более новой версии

С каждым обновлением Python приходит новые, устаревшие и устаревшие функции. Python 3.9 был официально выпущен на 5 октября 2020 года Отказ С 3.10 в пути версия 3.9 – самое большое обновление Python. Эта статья будет отображать прохладные функции, а модули представляют языку и те, которые больше не поддерживаются.

Новые особенности.

Вот классные новые функции, представленные в текущей версии. Это обновление функций до словаря, строки, подсказка и анализатора нового языка.

Новые операторы словаря.

Встроенный Python Дикт Класс поставляется с новым способом объединения словаря обновления. Обновления дополняют существующие методы объединения словарей с использованием Dict.Update и {** D1, ** D2} Отказ

>>> set_x = {"key1": "value1 from x", "key2": "value2 from x"}
>>> set_y = {"key2": "value2 from y", "key3": "value3 from y"}

>>> set_x | set_y
{'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}

>>> {**set_x, **set_y} # The same as the above
{'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}

Из вышеперечисленного вы можете увидеть, что set_x |. Set_y это то же самое, что {** set_x, ** set_y} Отказ При ближайшем инспекции вы можете заметить, что объединение сделано на основе ключа словаря. Это потому, что оператор рассчитывает элемент в словарях как Союз наборов .

Новый оператор Merge можно использовать для объединения различного словаря, подобного объекту, как и сохранить объект. {** D1, ** D2} Метод скорее вернет Дикт сорт.

>>> from collections import defaultdict

>>> fruits = defaultdict(
    lambda: None, 
    {"cabbage":"60% Vitmain C", "carrot":"5% Vitamin C", "broccoli":"70% Vitamin C"}
)

>>> Veggies = defaultdict(
    lambda: None, 
    {"apple":"7% Vitamin C", "mango":"60% Vitamin D", "orange":"88% Vitamin C"}
)

>>> fruits | veggies
defaultdict( at 0x000002379439DF70>, 
    {'cabbage': '60% Vitmain C', 'carrot': '5% Vitamin C', 'broccoli': '70% Vitamin C', 'apple': '7% Vitamin C', 'mango': '60% Vitamin D', 'orange': '88% Vitamin C'})

>>> {**fruits, **veggies}
{'cabbage': '60% Vitmain C', 'carrot': '5% Vitamin C', 'broccoli': '70% Vitamin C', 'apple': '7% Vitamin C', 'mango': '60% Vitamin D', 'orange': '88% Vitamin C'}

Обновление с использованием |= оператор.

>>> ds_libraries = {
...    "numpy": "Mathematical functions",
...    "Pandas": "Data structure manipulations",
...    "Scipy": "Scientifc calculations"
}

>>> ds_libraries |= {"Matplot": "Data visualization"}
>>> ds_libraries
{"numpy": "Mathematical functions", "Pandas": "Data structure manipulations", "Scipy": "Scientifc   calculations", "Matplot": "Data visualization"}

Новый оператор обновления может использоваться для обновления типов данных со словарью, подобной словарю структуру данных, в отличие от объединения (|) Оператор, в котором два словаря должны иметь правильные типы.

>>> #...

>>> # List of tuples
>>> ds_libraries |= [("","")]
>>> ds_libraries

Для получения дополнительной информации о новых операторах словаря см. PEP 584 Отказ

Новые строковые методы

Новые строковые методы были добавлены для удаления начала (префикса) и конца (суффикс) строки. Введен здесь RemovePrefix () и RemoSuffix () методы

Скажем, что вы хотите удалить префикс «Python» в строке «Python 3.9 круто. «Вы бы использовали RedPrefix Метод. Синтаксис str.removeprix (префикс) .

>>> string = "Python 3.9 is cool"
>>> string.removeprefix("Python")
' 3.9 is cool'

То же самое касается суффикса. Синтаксис str.removesuffix (суффикс)

>>> string = "Python 3.9 is cool">>> string.removesuffix("cool")'Python 3.9 is '

Если данный префикс или суффикс строки, передаваемой на любой методы, пусто, то строка будет возвращена.

>>> string = "Python 3.9 is cool"
>>> string.removesuffix("")
"Python 3.9 is cool"
>>> string.removesuffix("")
"Python 3.9 is cool"

Кроме того, либо методы удаляют только одну копию префикса или суффикса. Чтобы удалить все, используйте в то время как петля

>>> string = "Laracoco"
>>> string.removesuffix("co")

>>> while string.endswith("co"):
...     string.removesuffix("co")
...
>>>
>>> string
"Lara"

Для получения дополнительной информации о новых строковых методах см. PEP 616 Отказ

Встроенный тип намекания.

Перед Python 3.9 создание коллекции или универсального типа для аннотации кода необходимо импортировать Набрав модуль. Тип коллекции/универсала – это контейнер, который может быть заполнен другими типами, такими как список словарей. В предыдущих версиях Python это не может быть достигнуто. Было невозможно использовать Список [Dict] или Список [FLOAT] Чтобы напечатать подсказку, вы предпочитаете использовать соответствующий капитализированный тип из Набрав модуль.

from typing import List

def greeting(names: List[str]) -> None:
    for name in names:
        print("Hi", name)

В Python 3.9, используя импортированный Список и Обдумывать Соответствующий универсальный тип устраняется. Python теперь встроен в язык для легкого типа намекания.

def greeting(names: list[str]) -> None:
    for name in names:
        print("Hi", name)

Новый парсер

Основная часть интерпретатора Python – Парсер Отказ

К анализ означает разрешение данных в структуру, которая описывает это значение.

Проще говоря (в пути, даже я бы понял), анализатор является компонентом интерпретатора языка программирования или компилятора, который переводит строки кода на машиночитаемый язык.

Для Python Parser организует код в дереве, как известно как Разбор дерева или Абстрактное синтаксическое дерево (AST) Таким образом, переводчик может преобразовать в родной код.

Python 3.9 поставляется с переосмысленным парсером, который основан на Разборная экспрессия грамматики (PEG) вместо Левый налево, легковосходящее происшествие (Parser LL) Отказ

Выступление нового анализатора не сильно отличается от старого. Однако «формализм PEG является более гибким, чем л, когда дело доходит до разработки новых языковых функций. «Вот чтобы сказать, что много взлома нового анализатора не нужна, поскольку именно это имело место со старым парсером, который нуждался в окружающей среде. Peg Parser будет работать так же, как старый, производит Абстрактное синтаксическое дерево (AST) для переводчика.

Новый Python обновляет корабли с обеим анализатором, но имеет PEG по умолчанию. Имея оба анализатора хороши для сравнения производительности на уровне AST.

Старый парсер будет удален в следующей версии Python, версии 3.10. Это позволит разработать новые языковые функции без ограничения старого парсера.

Посмотреть PEP 617 для больше информации.

Новые модули.

Версия 3.9 представила два модуля: ZoneInfo Для поддержки часового пояса поддержки и графлиб для сортировки графов.

Правильный часовой пояс с ZoneInfo

Предыдущая версия Python не хватала встроенной поддержки для работы со временными поясами (технически, она сделала, но только поддерживала UTC), чтобы сделать это, вам придется использовать третью вечеринку DateutiL модуль.

Новый ZoneInfo не только встроен, но делает работу с легким. Модуль введет поддержку для Назначенный в Интернете номер номеров (IANA) База данных часового пояса в стандартную библиотеку.

Вы можете получить доступ к часовому поясу, используя ZoneInfo. ZoneInfo и прохождение в штат [или город] ключ. Это вернется описание часового пояса в качестве объекта.

from zoneinfo import ZoneInfo

>>> ZoneInfo("Africa/Lagos")
zoneinfo.ZoneInfo(key='Africa/Lagos')

ПРИМЕЧАНИЕ

Если вы получите ошибку как следующее:

ModuleNotFoundError: No module named 'tzdata'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "", line 1, in 
  File "C:\Python39\lib\zoneinfo\_common.py", line 24, in load_tzdata
    raise ZoneInfoNotFoundError(f"No time zone found with key {key}")
zoneinfo._common.ZoneInfoNotFoundError: 'No time zone found with key Nigeria/Lagos'

Это указывает, что нет местных баз данных часового пояса IANA в машине, поэтому ZoneInfo не может найти его. Чтобы решить ошибку, установите tzdata , который является модулем, содержащим базу данных часового пояса IANA.

>>> python pip install -m tzdata

Использование ZoneInfo. ZoneInfo. Вы можете создать временную метку с нужным часовым поясом.

>>> from datetime import datetime
>>> from zoneinfo import ZoneInfo
>>>
>>> timezone = ZoneInfo("Africa/Lagos")
>>> dt = datetime.now(tz=timezone)
>>> dt
datetime.datetime(2021, 8, 16, 10, 59, 1, 937856, tzinfo=zoneinfo.ZoneInfo(key='Africa/Lagos'))
>>> dt.tzinfo # Show time zone description
zoneinfo.ZoneInfo(key='Africa/Lagos')
>>> dt.tzname() # Show time zone name
'WAT'
>>>

Посмотреть PEP 615 Для меня информация.

График топологической сортировки с использованием графалиба.

Для сортировки данных, представленных в виде графика, Python 3.9 добавляет новый модуль графлиб в стандартную библиотеку, и она содержит графлин. Тополосодержатель Класс, чтобы предложить функциональность для выполнения топологического рода графика.

Например, пакеты, установленные из Pypi Репозиторий может иметь зависимости, которые также, в свою очередь, могут иметь другие зависимости. Это формирует структуру узлов и ссылок (ребра), каждый пакет является узлом и каждые зависимости ссылки.

Если вы хотите установить пакет, который имеет зависимости, и вы хотите убедиться, что все другие связанные зависимости устанавливаются, вы сделаете Топологические Сортировать, чтобы найти общий порядок необходимых зависимостей.

С графлиб Модуль, вы можете выполнить топологический сорт, чтобы найти общий порядок зависимостей в виде списка. Например, вы можете представлять пакет и его зависимости в качестве словаря.

dependencies = {
    "package_A": ["depedency_A", "depedency_B"],
    "dependency_B": ["dependency_F"],
}

Словарь представляет все зависимости Package_a и от осмотра, Package_a зависит от зависимость_а и DeDess_B Отказ DeDess_B зависит от Зависимость_ф. . Фактические зависимости Package_a являются DeDess_A и DeDess_B Отказ

Чтобы рассчитать общий порядок графика, чтобы узнать, какие зависимости должны быть установлены в первую очередь, используйте Тополока класс от графлиб Отказ

>>> from graphlib import TopologicalSorter
>>> #...
>>> ts = TopologicalSorter(dependecies)
>>> list(ts.static_order())
['depedency_A', 'depedency_B', 'dependency_F', 'package_A', 'dependency_B']

Заказ выше, учитывая в виде списка, предполагают, что DeDess_a Следует установить первым, следовал Зависимость_b Тогда Зависимость_f следуют пакет и, наконец, Зависимость_b Отказ

ПРИМЕЧАНИЕ:

Я не утверждаю, что есть обширное (это довольно неглубокое) знания о топологическом порядке и разрешении зависимостей. Смотрите следующее для более: Топологическая сортировка – Википедия , Общий заказ – Википедия , https://en.wikipedia.org/wiki/dependency_(disamiguration) Отказ

Для получения дополнительной информации графлиб Модуль и его API, см. Документация Отказ

Другие обновления.

В Python 3.9 многие модули были улучшены. http . Модуль добавил два новых кода состояния, imaplib Модули добавлены необязательные параметры таймуса для их конструкторов, Математика Модуль расширил math.gcd () Функция обрабатывает несколько аргументов и так далее.

Список довольно обширный, см. здесь для большего.

Устаревший код.

Многие кодовые модули и функция для стандартной библиотеки были устарены, в частности, поддержка Python 2.7 код.

Некоторые Python 2.7 устарели, что поддерживает поддержку обратной совместимости, и многие другие будут удалены в Python 3.10.

Для получения дополнительной информации о устаревшем коде, см. устаревшие предупреждения и Устаревший код Отказ

Обновление до Python 3.9.

Вы можете быть соблазнены обновить до версии 3.9, если это желание проверить новую функцию, то да, отправляйтесь на голову. Вы можете установить его, используя Виртуальная среда (Venv) Так что он садится рядом с вашей текущей версией Python. Если это то, что я думаю, вы должны подумать дважды.

Вы текущий проект по производству или развитию, работающим на версии 3.7 или 3.8, могут не понадобиться никаких изменений, если вы настаиваете, подумайте об этом: я должен обновить мою среду проекта и сделать его зависимым от Python 3.9?

Переезд в Python 3.9 (или любая новая версия) принесет вам пользу и/или вашей команде, если проектная среда под контролем и не повлияет на других пользователей или сообществе. Вы можете пойти дальше и использовать все прохладные новые возможности.

Вы не должны портировать более новую версию, если она повлияет на сообщество, библиотека пакета, написанная в версии 3.7, потеряет некоторую функцию, которая была устарена в 3.9. Изменения в общественном проекте должны быть сделаны осторожно и постепенно.

Посмотреть Портирование в Python 3.9 для большего.

Python 3.10?

Да все верно! Как во время этого письма Python 3.10 должен быть освобожден в следующем месяце 25 октября 2021 Отказ

После выхода текущей версии, продвижение вперед, вся версия будет выпущена каждые 12 месяцев, рулеги от обычных восемнадцати месяцев цикла выпуска.

С более быстрым циклом выпуска языка Python выпустит функции быстрее с меньшим количеством изменений, однако не получит новые функции быстрее или несовместимыми. Весь новый релиз получит поддержку в течение пяти лет. Текущая версия, 3.9, после его первоначального выпуска будет получать поддержку до 2025 года.

Python 3.10 будет особенным, потому что это первая версия Python с двумязначной малой версией (.10)

Заключение

Поскольку змея проливает свою кожу, так что будет язык программирования Python. Текущий релиз самый захватывающий еще. Примерно через месяц он снова пролится. Но это не значит, что версия 3.9 выйдет из-за того, что она даже не так широко распространена, как 3,7. Обычно он занимает некоторое время, прежде чем Project Project для более новых версий.

Продолжайте и попробуйте перечисленные функции, это может просто соответствовать тому, что вы строите или собираетесь построить.

Чирикать на я Отказ Давайте подключемся.

ваше здоровье!

Оригинал: “https://dev.to/romeopeter/python-3-9-what-s-new-2nmm”