LINUX.ORG.RU

Python 3.9.0

 , ,


2

4

Вышел новый стабильный релиз популярного языка программирования Python.

Python – высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Основные черты – динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений, высокоуровневые структуры данных.

Python – стабильный и распространённый язык. Он используется во многих проектах и в различных качествах: как основной язык программирования или для создания расширений и интеграции приложений. Основные области применения: веб-разработка, машинное обучение и анализ данных, автоматизация и системное администрирование. В настоящий момент Python занимает третье место в рейтинге TIOBE.

Основные изменения:

Новый высокопроизводительный синтаксический анализатор на базе грамматик PEG.

В новой версии текущий парсер Python на основе грамматик LL(1)(КС-грамматика) заменён на новый высокопроизводительный и стабильный синтаксический анализатор на базе PEG (РВ-грамматика). Анализаторы для языков, представленных КС-грамматиками, такие как LR-анализаторы, требуют особого шага лексического анализа, который разбивает входные данные в соответствии с пробелами, пунктуацией и так далее. Это необходимо, так как эти анализаторы используют предварительный анализ для обработки некоторых КС-грамматик в линейное время. РВ-грамматики не требуют отдельного шага лексического анализа, а правила для него могут быть заложены вместе с другими правилами грамматики.

Новые операторы и функции

Во встроенный класс dict добавлены два новых оператора, | для слияния словарей и |= для обновления.

В класс str добавлены две новые функции: str.removeprefix(префикс) и str.removesuffix(суффикс).

Аннотация типа для встроенных коллекций

В этом релизе включена поддержка синтаксиса обощённых типов во всех стандартных коллекциях, доступных в настоящее время.

def read_blog_tags(tags: list[str]) -> None:
    for tag in tags:
        print("Tag Name", tag)

Другие изменения

  • PEP 573 Доступ к состоянию модуля с помощью методов расширения C

  • PEP 593 Гибкие функции и переменные аннотации

  • PEP 602 Python переходит на ежегодные стабильные релизы

  • PEP 614 Смягчающие грамматические ограничения на декораторы

  • PEP 615 Поддержка базы данных IANA по часовым поясам в стандартной библиотеке

  • BPO 38379 сборка мусора не блокируется на восстановленных объектах

  • BPO 38692 os.pidfd_open, для управления процессами без гонок и сигналов;

  • BPO 39926 поддержка Unicode обновлена до версии 13.0.0

  • BPO 1635741, при многократной инициализации Python в одном и том же процессе, больше не происходит утечка памяти

  • Коллекции Python (range, tuple, set, frozenset, list, dict) ускорены с помощью векторного вызова PEP 590

  • Некоторые модули Python (_abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, ресурс, time, _weakref) теперь используют многофазную инициализацию, как определено в PEP 489

  • Ряд стандартных модулей библиотек (audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios, zlib) теперь используют стабильный ABI, определенный PEP 384.

>>> Подробности

★★★★★

Проверено: Shaman007 ()

Ответ на: комментарий от FishHook

Вот так исторически сложилось, что для сложения и конкатенации используется один и тот же оператор

Нет, не исторически. Это специально сделали, обычно в других языках сложение и конкатенация различимы.

Лично я не вижу проблемы в том, что словари и множества имеют свой набор операторов отличный от списков и кортежей.

Вот почему то все забывают что в Python-е используется утиная типизация. Она позволяет писать код обобщённый для разных типов если они поддерживают одинаковый интерфейс. А на это авторы просто забили.

Rodegast ★★★★★ ()
Ответ на: комментарий от Rodegast

Изначально, кстати, хотели использовать + и +=, долго обсуждали и передумали. Здесь можно посмотреть историю обсуждения https://www.python.org/dev/peps/pep-0584/#use-the-addition-operator

как я понял, для операции | не соблюдается правило (a + b) + c == a + (b + c)

FishHook ()

Основные области применения машинное обучение и анализ данных

Сейчас бы еще на динамическом, слабо (да-да, именно слабо) типизированном языке обучать нейронки и анализировать данные. Чтобы эти нейронки потом сбивали людей на дорогах. А результаты анализов гробили бизнесы и научные исследования. Просто потому, что дата-сатанист не тот тип в функцию передал, а питон прожевал и не поперхнулся

anonymous ()
Ответ на: комментарий от anonymous

Сейчас бы еще на динамическом, слабо (да-да, именно слабо) типизированном языке обучать нейронки и анализировать данные. Чтобы эти нейронки потом сбивали людей на дорогах. А результаты анализов гробили бизнесы и научные исследования. Просто потому, что дата-сатанист не тот тип в функцию передал, а питон прожевал и не поперхнулся

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

byko3y ★★★ ()
Ответ на: комментарий от byko3y

При обучении, вокруг тензорфлоу намазывают порядочно обвязочных соплей на питоне, которые описывают домен, настраивают движок тензора, итд. С анализом данных такая же хрень. Pandus и NumPy ведь не сделает за тебя всю работу. Обвязок все равно напишешь мама не горюй. И обязательно наделаешь детских ошибок. Тут к гадалке ходить не надо. Какой датасаенс? Какой машин лёрнинг? Без статического анализа

Я честно не понимаю хайпа вокруг питона. Вроде уже не 90-е на дворе. Времена сайтов на коленке прошли. В открытом доступе десятки серьезных языков. Какой нахрен питон??

anonymous ()
Ответ на: комментарий от anonymous

Просто потому, что дата-сатанист не тот тип в функцию передал, а питон прожевал и не поперхнулся

А можно какой-нибудь синтетический пример того, что вы сейчас сказали? Конкретно, хочу увидеть питонью функцию, которой можно дать аргумент произвольного типа, а она и не поперхнется

FishHook ()
Ответ на: комментарий от anonymous

Ну, примерно для такого юзкейса гугл пытался заюзать swift для этого вашего tensorflow. Но пока за пределами гугла никто это не юзает.

x3al ★★★★★ ()
Ответ на: комментарий от anonymous

ты так говоришь, будто в большинстве других тем бывает что-то другое

anonymous ()
Ответ на: комментарий от FishHook
INSECTS = []

class People:
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return "mr. " + self.name

class Insect:
    def __init__(self, species):
        self.species = species

    def __str__(self):
        return self.species

def addInsect(insect):
    INSECTS.append(insect)

def killWithFire():
    for insect in INSECTS:
        print("Гори, сучье отродие, " + str(insect))

addInsect(Insect('Дерьмовая муха'))
addInsect(Insect('Дерьмовый комар'))
addInsect(People('FishHook')) # Oops i did it again

killWithFire()
anonymous ()
Ответ на: комментарий от anonymous

И обязательно наделаешь детских ошибок.

Ты детских ошибок наделаешь быстрее и больше на плюсах. А потом будешь неделю трахаться с дебагером. В питоне вообще ошибок сложно понаделать. У тебя есть repl, исключения, вменяемый трейсбэк и т.д. Недостатки питона совсем не в этом.

yvv ★★☆ ()
Ответ на: комментарий от yvv

Ты детских ошибок наделаешь быстрее и больше на плюсах

Лучше уж на плюсах, обмазавшись сторонними стат. анализаторами. Но зачем плюсы, если сейчас полно офигенных качественных языков

У тебя есть repl, исключения, вменяемый трейсбэк и т.д

Тупой анонимус. Зойчем тебе типы если ты сам можешь ловить ошибки в рантайме

anonymous ()
Ответ на: комментарий от anonymous

Ну и чё ты своим примером сказать-то хотел, ононим? Твой дезигн паттерн смысла не имеет. У тебя люди от букашек ничем не отличаются. Это твоя проблема, а не питона.

yvv ★★☆ ()
Ответ на: комментарий от yvv

Это в твоей утинной вселенной не отличаются. А в нормальном языке INSECTS: Insect[] = []

anonymous ()
Ответ на: комментарий от anonymous

Но зачем плюсы, если сейчас полно офигенных качественных языков

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

yvv ★★☆ ()
Ответ на: комментарий от FishHook

как я понял, для операции | не соблюдается правило (a + b) + c == a + (b + c)

Странная у них аргументация, конкатенация это правило тоже не соблюдает.

Rodegast ★★★★★ ()
Ответ на: комментарий от yvv

жулиа

Сорта питона. Опциональные тайпхинты, покрывающие примитивные кейсы. Идеально для говнокода

anonymous ()
Ответ на: комментарий от anonymous

Опциональные тайпхинты

Это не тайпхинты. Почитай доки. Чуваки, которые это придумали, продумали всё очень хорошо. Но у них нет такой инфраструктуры и юзербазы как у питона.

yvv ★★☆ ()
Ответ на: комментарий от anonymous

И что? Код вполне валидный, ты ничего не делаешь с объектами кроме вывода на консоль. Это то же самое, что иметь типизированный список List lst = new List<>{};

FishHook ()
Ответ на: комментарий от FishHook

.. мог бы сказать FishHook, но робот с огнеметом спалил его во время отладки в repl, случайно приняв за муху

anonymous ()
Ответ на: комментарий от fsb4000

Ноутбук по-идее делает воспроизводимые результаты, то есть ты можешь скинуть его кому-то, они могут поиграть данными без изменения логики, ну или логикой без изменения данных, вобщем прикольная штука.

А ИДЕ оно именно для разработки, у тебя нету тут данных, графиков и тд.

loz ★★★★★ ()
Последнее исправление: loz (всего исправлений: 1)
Ответ на: комментарий от CryNet

Что-то гон какой-то вот сейчас ищут 8к питонистов это ~3к ИТ компаний.

MaxPower ★★ ()
Ответ на: комментарий от Rodegast

Она имеет право на жизнь. Ты не можешь предсказать, что происходит внутри, например, функции sum. Очевидно, что она использует __ add __(), а как использует, от нас скрыто. Нельзя предсказать, что сложение элементов не происходит с конца по каким-то неводомым оптимизациям.

FishHook ()
Последнее исправление: FishHook (всего исправлений: 1)

Не знаю как вы, а я люблю давить своего питона с Владимиром

Ваш бряк

anonymous ()
Ответ на: комментарий от FishHook

Ты не можешь предсказать, что происходит внутри, например, функции sum.

Это плохой пример, она умеет только числа складывать.

Нельзя предсказать, что сложение элементов не происходит с конца по каким-то неводомым оптимизациям

Ну если даже и происходит, то для множеств ничего не изменится, а в словарях будет другая последовательность ключей что в общем не страшно.

Rodegast ★★★★★ ()
Ответ на: комментарий от anonymous

Я честно не понимаю хайпа вокруг питона. Вроде уже не 90-е на дворе. Времена сайтов на коленке прошли. В открытом доступе десятки серьезных языков. Какой нахрен питон?

Для меня это тоже загадка. Или вот: почему люди покупают айфоны? Или автомобили BMW? Это говно же. Ан нет, берут, платят огромные деньги. Потому что модно. Хотя я сомневаюсь, что в случае питона один в один тот же механизм работает. Как я уже написал — для меня это тоже загадка.

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

Более точная аналогия — это измерения расстояний в авиации шагами и стопами. Напоминаю, что миля — это тысяча шагов, а фут — это стопа в переводе с английского. Почему этим неудобными инструментами пользуются? Да потому что все пользуются — и ты пользуйся. Самый умный, что ли?

byko3y ★★★ ()
Ответ на: комментарий от Rodegast

Это плохой пример, она умеет только числа складывать

>>> sum([[1], [2]], [])
[1, 2]
anonymous ()
Ответ на: комментарий от x3al

Ну, примерно для такого юзкейса гугл пытался заюзать swift для этого вашего tensorflow. Но пока за пределами гугла никто это не юзает

https://www.tensorflow.org/swift/tutorials/python_interoperability

«You can import Python modules from Swift, call Python functions, and convert values between Swift and Python...

Use Python.import to import a Python module. It works like the import keyword in Python.»

let np = Python.import("numpy")
print(np)
let zeros = np.ones([2, 3])
print(zeros)
<module 'numpy' from '/tmpfs/src/tf_docs_env/lib/python3.6/site-packages/numpy/__init__.py'>
[[1. 1. 1.]
 [1. 1. 1.]]

Угу, значит, моя теория верна — это принцип неустранимого наследия.

byko3y ★★★ ()
Ответ на: комментарий от anonymous

Сорта питона. Опциональные тайпхинты, покрывающие примитивные кейсы. Идеально для говнокода

Справедливости ради, Жуля — это правильный Питон. Потому что Питон в принципе невозможно в общем виде скомпилировать в статический код, то есть, без запроса к ассоциативному массиву на каждый чих. А Жулю — можно,

byko3y ★★★ ()
Последнее исправление: byko3y (всего исправлений: 1)
Ответ на: комментарий от CaveRat

Оставь, это называется «стиль»

Это называется стыдобище.

ya-betmen ★★★★★ ()
Ответ на: комментарий от Rodegast

Это плохой пример, она умеет только числа складывать.

Что-то мне подсказывает, что питона ты не знаешь

sum([[1,2], [3,4]], [])

будет другая последовательность ключей что в общем не страшно.

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

FishHook ()
Последнее исправление: FishHook (всего исправлений: 2)
Ответ на: комментарий от Goury

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

bhfq ★★★★★ ()
Ответ на: комментарий от FishHook

Конкретно, хочу увидеть питонью функцию, которой можно дать аргумент произвольного типа, а она и не поперхнется

а ты точно «гуру Питона»? :)

на тебе такую функцию, прямо из «недр Питона» :)

print()
Sahas ★★★★★ ()
Ответ на: комментарий от Rodegast

быдло

Хорошо. А каким бы оператором ты тогда обозначил пересечение множеств, если бы объединение обозначалось плюсом, мне интересно? Символы &, |, ^ и - вполне говорят сами за себя, для среднестатистического программиста.

Может это всё-таки ты не в тот тред зашёл, умник?

anonymous ()
Ответ на: комментарий от Sahas

А что не так то? Я просил пример (не у тебя кстати). Вот ты дал пример. Пример ярко демонстрирует, что никакой опасности в функции принт нет. От человека, который истерил по поводу «она и не поперхнется» я ждал такого же примера, чтобы продемонстрировать несостоятельность опасений. Ты,кажется, присвоил мне утверждение, что в питоне нельзя сделать такую функцию, и тут же доблестно опроверг сей тезис. Ну так протри глаза - я ничего такого не утверждал.

FishHook ()
Ответ на: комментарий от FishHook

Ты,кажется, присвоил мне утверждение, что в питоне нельзя сделать такую функцию

Да, из твоего сообщения примерно так и следовало, сорян, что неправильно понял.

Анон имел в виду, что часто функция на вход ожидает определённый тип аргумента, а если юзер подсунет ей не тот, который ожидается, в ряде ситуаций питон спокойно «проглотит» это, и выдаст на выходе что-то неудобоваримое, которое аукнется совершенно в другом месте. Как пример, я лично набил немало шишек, когда написал функцию, принимающую список строк, а потом случайно передал ей на вход просто строку. В самой функции было что-то типа for item in arg: do(item)

Sahas ★★★★★ ()
Последнее исправление: Sahas (всего исправлений: 2)
Ответ на: комментарий от Sahas

Я целиком и полностью согласен, что в питоне есть масса способов выстрелить себе в ногу. А, собственно, где их нет? Но утверждения анона, о том, что динамически типизированные языки априори херня, только ввиду своей димамичнеости, это откровенно хамский тезис, равняющий всех пользователей питона с говном. Этак я могу найти проблемы, скажем, в Си. Да вот в Си можно случайно разыменовать нулевой указатель, давай на этом основании сделаем вывод (который делает анон), что весь софт написаный на Си - гавно.

FishHook ()
Ответ на: комментарий от FishHook

Плохой танцор всегда найдёт к чему придраться.

anonymous ()
Ответ на: комментарий от Goury

Да мне как-то наплевать что тебе интересно или не интересно, я тут пишу просто потому что мне хочется кнопки на моей клавиатуре нажимать.

2 + 2 = 4 здесь мнение не играет роли, мы лишь делимся знаниями

anonymous ()
Ответ на: комментарий от FishHook

Я целиком и полностью согласен, что в питоне есть масса способов выстрелить себе в ногу. А, собственно, где их нет? Но утверждения анона, о том, что динамически типизированные языки априори херня, только ввиду своей димамичнеости, это откровенно хамский тезис, равняющий всех пользователей питона с говном. Этак я могу найти проблемы, скажем, в Си. Да вот в Си можно случайно разыменовать нулевой указатель, давай на этом основании сделаем вывод (который делает анон), что весь софт написаный на Си - гавно.

Анон говорит о том, что часть проверок можно выполнять до начала выполнения программы. Выстрелить в ногу можно в любом языке, а отследить вообще все проблемы в тюринг-полных языках невозможно, поэтому вопрос в том, какие проверки выполняются в статике, а какие в динамике. В питоне всё заканчивается проверкой синтаксиса, дальше всё уезжает на выполнение, в этом суть претензии. Си в этом плане надёжнее - хотя бы нельзя умножать массивы на функции. Но вывод о том, что си - гавно, верный.

Laz ★★★★★ ()
Ответ на: комментарий от FishHook

ну, в ряде случаев при написании на Питоне хотелось бы иметь автоматическую проверку типов... Хотя бы в рантайме. Писать в каждой функции if isinstance(arg, int): do(arg) else: raise Exception(«Bad argument type») как-то запарно...

Sahas ★★★★★ ()
Ответ на: комментарий от Laz

часть проверок можно выполнять до начала выполнения программы

кстати, да, как пример — неинициализированная переменная в функции. Линтеры это отлавливают, но, блин, можно же было и интерпретатору понять, что следующий код плохой:

def func():
    print(a)

Кстати, может кто-нибудь сделать так (не меняя функции func()), чтобы её вызов не завершился исключением? (Помимо определения переменной во внешней области видимости)

Sahas ★★★★★ ()
Последнее исправление: Sahas (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.