LINUX.ORG.RU

Python 3.13

 , ,


1

5

После года разработки вышла новая стабильная версия интерпретируемого языка программирования Python 3.13. Релиз включает изменения в собственно языке и его стандартной библиотеке. К важнейшим изменениям относятся использование нового интерактивного интерпретатора по умолчанию, экспериментальная поддержка работы в режиме free-threaded (т. е. с отключением global interpreter lock) (PEP 703), и JIT-компилятор (PEP 744).

С этого релиза осуществлён переход на новый цикл релизов Python (Annual Release Cycle for Python, PEP 602), в связи со стремлением расширить период «полной поддержки» новых выпусков:

  • Python 3.9–3.12 имеют полтора года полной поддержки, за ними следует три с половиной года исправления брешей в безопасности.
  • Python 3.13 и более поздние релизы будут иметь два года полной поддержки и три года исправлений уязвимостей.

Продолжается работа по усовершенствованию сообщений об ошибках. Теперь traceback’и по умолчанию подсвечиваются цветом. Встроенная функция locals() теперь имеет определённую семантику для изменения возвращаемого меппинга (PEP 667), а параметры типов (typing.TypeVar, typing.ParamSpec, typing.TypeVarTuple) поддерживают значения по умолчанию (PEP 696).

Изменения стандартной библиотеки включают удаление устаревших API и модулей (aifc, audioop, cgi, cgitb, chunk, crypt, imghdr, mailcap, msilib, nis, nntplib, ossaudiodev, pipes, sndhdr, spwd, sunau, telnetlib, uu и xdrlib), а также привычные улучшения в области дружелюбия к пользователю и корректности. Несколько модулей исключены из поставки в связи с объявлением их устаревшими в Python 3.11 (PEP 594), в том числе инструмент и библиотека 2to3.

Из улучшений безопасности стоит отметить, что ssl.create_default_context() устанавливает флагами по умолчанию ssl.VERIFY_X509_PARTIAL_CHAIN и ssl.VERIFY_X509_STRICT.

Добавлена поддержка платформ: Apple iOS и Android теперь официально поддерживаемые платформы (tier 3) (PEP 730, 738). wasm32-wasi поддерживается на уровне tier 2, прекращена официальная поддержка wasm32-emscripten.

Для более основательного ознакомления с нововведениями релиза, обращайтесь к официальной документации (по библиотеке, по языку). Руководствуйтесь статьей «Переход на Python 3.13» для обновления своих проектов на новую версию языка. Также см. changelog.

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



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

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

что такое access atomicity, memory model, happens-before, memory visibility и пр.;

освой стандартные примитивы синхронизации (локи, рлоки, барьеры, count down latch, семафоры);

научись корректной работе с condition vairiables;

напиши хоть немного многопоточных программ

Ни одного слова не понял и конечно же никогда ничего из этого не писал. Прямо урыл… Плачу 🤣

и только потом придешь и пояснишь за свой «атомарный += инкремент» в питоне (которого нет, но который якобы есть за счет GIL)

Я такого не писал

асинк решает проблему гил

Да, решает, так как GIL не используется в однопотоке

гил в питоне нужен, чтобы мы не могли одновременно записывать в глобальные переменные

гил в питоне нужен, чтобы были атомарные операции в языке

Последнее я писал

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

Бред величия во все поля с типичным приемом демагога — подменой тезисов.

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

Ни одного слова не понял и конечно же никогда ничего из этого не писал. Прямо урыл… Плачу

если тебе неприятно, что твой собеседник куда компетентнее тебя и написал десятки многопочных программ в том числе «больших», то это у тебя проблема уже психологическая.

разговор с тобой окончен.

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

десятки многопочных программ

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

rtxtxtrx
()
Ответ на: комментарий от alt-tab-let

Какая разница, насколько это пуристически неправильно, если ты за 10 символов делаешь элегантную конструкцию, на которых в правильных языках, со всеми типами и кодировками, ушло бы 10 строк.

Неужели между str(binary) и binary.decode("utf-8") настолько большая разница?

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

Неужели между str(binary) и binary.decode(«utf-8») настолько большая разница?

ну, визуально да, элегантность пропадает. но str хрен с ним, я просто изменениям удивился. просто в python2, когда ты знал, что делаешь, ты мог вообще не делать str, а в py3 может приходиться сначала делать decode, потом encode чисто из-за одного туда-сюда. и так разница набегает, вон там сверху кто-то код выкладывал, он переусложнён, наполнен ненужными деталями и выглядит, честно говоря, ужасно. сделано всё по технике правильно, а по виду - неэлегантно. такое читать не хочется. хотя раньше я код python я читал, как стихи. помню несколько тем было на лоре с однострочниками (обычно в ветках ruby), так там сразу всё было понятно, легко читалось... и легко писалось.

alt-tab-let ★★
()
Ответ на: комментарий от alt-tab-let

зона комфорта та ещё пляж

для комфортности py3k просто поляруй навык в py3k в программировании в малом и тогда фсё снова будет шелковисто

и да прст см рассилки начиная с python 0.9 и whatsnew (благо оно всегда в комплекте с сырцами в доках либо в старой папке) - что бы фундировать о эволюции ко второй версии и как постоянно модель плыла

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

Я свои байты сконвертировал остальное ниособо тоьнужно

alt-tab-let ★★
()
Ответ на: комментарий от alt-tab-let

да блин зелоты всегда таковы

экономия мыслитоплива все дела

по факту python почти идеальный repl для прототипы

но проблема всякого долгоживущего текста - постоянная его переинтерпретация очередными букваречитателями

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

Да впринципе я уже смирился с косяками py3. Но первоначальный шок от некоторых решений запомнился.

alt-tab-let ★★
()
Ответ на: комментарий от alt-tab-let

см либеральный фашизм (какого то -берга) - о очередном восстании масс

и почему в таком космосе истинно суждение о не правоте в оценночности

эпоха такая вновь

ибо трайбализм и прочие лулзы

qulinxao3 ★★
()
Ответ на: комментарий от alt-tab-let

Ну, т.е., твой подход «хуятяп ляп и в продакшн». И тебе не нравится, что язык заставляет четко указывать, что нужно сделать?

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

Нет у него никакого продакшена. Ему не нравится, что с ним персонально посоветоваться забыли, из чего он делает вывод, что Гвидо с перепою запилил питон3 за вечер и никому не сказал. Сам он участвовать в обсуждении ПЕПов не в состоянии, не говоря уже о внесении предложений, языка не знает, программированием не занимается и за новостями не следит. Жопа у него горит за компанию. Ну как же, на ЛОРе же принято хейтить питон, и пофигу что ни питона ни хаскеля ты не знаешь. Это как малыш десятилетий наслышавшись от старшаков сексуальных фантазий идёт рассказывать друзьям про секс, толком не зная где у девочек писька расположена.

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

О ужас… Сайт на который я забил не работает, потому что там нужно перезапустить сервер после обновления сертификата… Спасибо что напомнил, теперь планета Земля не погибнет

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

В python2 был вот такой код:

_get_D = lambda V: int(V.split('<')[1].split('>')[0].split(',')[0])

В python3 приходится пихать вот такие костыли

_get_D = lambda V: int((V.decode() if type(V) is bytes else V).split('<')[1].split('>')[0].split(',')[0])

Хороший ЯП тем и хорош, что его умолчания удовлетворяют личным предпочтениям большинства пользователей.

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

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

Хороший ЯП тем и хорош, что его умолчания удовлетворяют личным предпочтениям большинства пользователей.

Нужна статистика. По собранной с сообщений в этой теме, получается, что больше пользователей НЕ видит проблем в разделении str и bytes.

(V.decode() if type(V) is bytes else V)

Довольно странный для меня момент. Т.е. нет уверенности какой тип придёт в функцию? То ли bytes, то ли str? Не, я понимаю, что динамика, но всё же..

andalevor ★★★
()

Ничего себе. Ещё остались неадекваты, воспринимающие python2 как нечто актуальное, подлежащее обсуждению вне контекста истории развития языков программирования.

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

Нужна статистика. По собранной с сообщений в этой теме..

такая выборка нерепрезентативна.

Т.е. нет уверенности какой тип придёт в функцию?

В py2 bytes не было. В py3 они появились а у V разные источники - иногда V это bytes.

Самое поганое вот это:

Python 3.10.12 (main, Sep 11 2024, 15:47:36) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> b'123'=='123'
False

Т.е. если один из операндов по какой то причине стал bytes вместо str, то все ломается. МОЛЧА ЛОМАЕТСЯ без каких либо сообщений, потому что в питоне можно сравнивать все со всем.

За такое точно надо бить канделябром.

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

И еще прекрасное:

>>> int('1'[0])
1
>>> int(b'1'[0])
49
>>> int(b'1'[:1])
1

Кто тут за py3 топил - вы продолжаете утверждать что там все хорошо с bytes?!

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

PS то есть на первый взгляд все ОК - bytes массив байт, [i] возвращает какой то байт, т.е. целое число. Но с т.з. перехода 2to3 полный трэш…

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

такая выборка нерепрезентативна.

Я привёл пример. Давайте вашу выборку. Надеюсь, она будет не с форума любителей py2 :)

b’123’==‘123’ False

Да. Было бы логичнее если бы падало с ошибкой.

по какой то причине стал bytes вместо str

Динамическая типизация, увы. Была б статическая, уже на этапе компиляции не вышло бы допустить случайно такую ситуацию, что в в функции могет оказаться объёкты разных типов.

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

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

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

Ага. И вишенкой на торте - я занимаюсь HPC. У нас результаты расчетов кладутся в свою БД, каждый расчет это директория с кучей каких то файлов и один файлик с метаинформацией в формате pickle. Для всяких научных расчетов самописные БД такого плана довольно стандартны - традиционные реляционные БД категорически не подходят по самым разным причинам.

Выбор pickle на тот момент казался вполне оправданным - python был 2.4 что ли, форматов сериализации было не так много, тем более в питоне. О чем Гвидо в своей книжке написал то и взяли. Кто ж знал что Гвидо и КО такие редиски…

Итак, результатов расчетов просто туева хуча, сотни Гб от десяков, если не сотен проектов. На py2 все работает, хотя коллеги давно гундят что надо переходить на py3. Вот начал переходить… в результатах часто встречаются бинарные фрагменты данных вроде

S'_\x01\x03\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x08@'

S это меточка от pickle что фрагмент бинарный. В py3 pickle говорит:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xf0 in position 10: ordinal not in range(128)

Упс? Беда именно в кривой реализации str/bytes.

То есть я понимаю, ладно - давайте сломаем обратную совместимость в ЯП ради каких то высших соображений. Но ломать обратную совместимость по СОХРАНЕННЫМ ДАННЫМ, причем в формате который как бы для этого ЯП родной и авторами активно ЯП продвигался - это полный трындец… за такое не канделябром бьют, за такое топят в деревенском толчке, головой кверху, что бы не сразу. Это не просто какое-то-там-неуважение-к-пользователям, это полный и феерический трындец. У меня даже слов нету как это назвать…

Да, конечно, я могу сменить формат сериализации и написать конвертер на py2, и потом каждый раз увидев что БД не читается этим конвертером проходится. Но сейчас я склоняюсь к тому тчо надо прос менять питон на что то другое.

Поймите меня правильно, я люблю питон. Я пишу на нем больше 20ти лет, я учил ему студентов, я активно попагандировал связку py/c++ для HPC расчетов. На питоне можно делать удивительные вещи. Но нет никаких гарантий что то что на нем сделано сейчас будет работать через 10-20 лет, сколько бы ты усилий не приложил на поддержку. Уникальные данные, полученные за это время, могут быть в какой то момент просто утрачены с очередным обновлением.

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

Давайте вашу выборку.

Я таких исследований не проводил, не мой профиль.

Динамическая типизация, увы. Была б статическая

Авторы bytes не знали что у в питоне динамическая типизация?!

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

В py3 pickle говорит:

… потому что кто-то не указал кодировку. В руководстве pickle указано, как читать данные из python2.

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

ну вот, всего-то на 12 странице срача появилось полезное, растёт лор - то проффесионально, прогрессирует )

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

Дико, невыносимо бесит что приходится тратить время на переход 2to3 когда есть куда более насущные занятия;-(

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

первое и третье выражения не имеют ничего общего, неясно что ты хотел тем самым продемонстрировать.

во втором выражении сабскрипшн возвращает int; ну int(49) == 49, и что?

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

продолжаете утверждать что там все хорошо с bytes?!

а что не хорошо-то?

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

Беда именно в кривой реализации str/bytes.

нет никакой кривой реализации у str и bytes, у тебя личные кривые представления и ты их пытаешься проецировать на язык

Но ломать обратную совместимость по СОХРАНЕННЫМ ДАННЫМ, причем в формате

ломать обратную совместимость в мажорной версии можно.

формат менять можно, этот формат не обещал быть портабельным или интероперабельным с чем еще, он работает в конкретной версии питона, формат меняется вместе с версией питона, его пять версий уже

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

бесит что приходится тратить время на переход 2to3

это не претензия к языку

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

кстати, если есть кто из староверов - py2-pillow я сейчас могу собрать?

alt-tab-let ★★
()

Пацаны, 8 сообщений до langrage осталось.

Теперь 7.

alt-tab-let ★★
()
Ответ на: комментарий от AntonI

связку py/c++ для HPC расчетов

Зачем ты употребляешь питухон в контексте HPC(высокопроизводительных вычислений)? Каким боком он там?

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

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

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

коллеги давно гундят что надо переходить на py3.

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

Ради чего обновляться с Python2 на Python3? Наверно ради, того чтоб какой-то комментатор в чате не начал обсмеивать и хейтить. Ситуация когда в проекте останавливаются на какой-то версии языка - достачно распространенная. Хватает возможностей, работает и не надо лезть и ломать ради цифирок новой версии.

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

Ради чего обновляться с Python2 на Python3?

Ради того чтобы пользоваться современными средствами разработки. Анатоль - это пример человека, который презирает общественное мнение… Ему осталось только отрастить длинные волосы как у панка, написать уеб-фреймворк на C и агитировать за отключение JavaScript в браузерах по умолчанию

Ситуация когда в проекте останавливаются на какой-то версии языка

Систему ты тоже не обновляешь? Python старых версий уже никак не скомпилируешь, потому как старых либ для него не найдешь…

Хватает возможностей, работает и не надо лезть и ломать ради цифирок новой версии.

Этот подход работает лишь с write-only скриптами у быдлокодеров. А в проектах нужно либы обновлять хотя бы из-за всяких CVE, потому как быть взломанным из-за грубейшей ошибки в библиотеке для работы с JWT https://book.hacktricks.xyz/pentesting-web/hacking-jwt-json-web-tokens — это то за что ретрограды типа тебя агитируют… А там одну либу обновил, потом другую, третья ошибку высрала мол по такому-то пути что-то найти нельзя, потому что версия питона у тебя старая… Так и обновляешься, но люди далекие от разработки продолжают нести чушь в массы

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

python чем и был хорош, что давал очевидную реакцию.

1 + '1' это неадекватно. что это даст? 11 или 2? вообще неоднозначно. 1 + true? что за неведомая зверушка родится? в python было всё очевидно, 42 == '42' он тебе не даст сделать. а вот идентичное 'abcde' == b'abcde' он делать давал. он вёл себя так, как ожидается. что будет в случае 1 + true, не знают, наверное, даже сами разработчики php и js.

Python 2.7.18 (default, Sep 19 2023, 07:10:59) 
[GCC 10.2.1 20210110] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 1 + True
2
>>> 

Ой. Ну ладно, не может же python2 быть вообще без недостатков.

alt-tab-let ★★
()
Ответ на: комментарий от alt-tab-let

а вот идентичное ‘abcde’ == b’abcde’ он делать давал

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

А вот что ты скажешь про то, что убрали оператор print и заменили на функцию print()? Это же две лишние скобки нужно печатать!

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

А вот что ты скажешь про то, что убрали оператор print и заменили на функцию print()? Это же две лишние скобки нужно печатать!

скажу одно, бесит :)

alt-tab-let ★★
()
Ответ на: комментарий от Tinker

без взлёта в последних двух третях 90ых змеи в hpc не было бы позыва replace(schem in sicp,python) in mit

и последующего «всё заверте»

и да 2->3 частично обусловленно снижением общего уровня пользователей языка

qulinxao3 ★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.