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)
Ответ на: комментарий от alt-tab-let

в python2 это, естественно, просто abcde

Преимущество python2 не в том что там другие строки, а в том что ничего не меняется :)

Rodegast ★★★★★
()
Ответ на: комментарий от Playermet
Python 3.11.2 (main, Aug 26 2024, 07:20:54) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 13.decode()
  File "<stdin>", line 1
    13.decode()
      ^
SyntaxError: invalid decimal literal

тут ниработаит

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

а в том что ничего не меняется :)

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

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

Понятно. Для отладки есть repr. Для сериализации есть свои функции. А str выходит ни для чего не нужен, его можно было просто удалить из языка.

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

Не разпарсил.

Это выражение относится к миру RPG игр, когда ГГ нужно выполнить задания чтобы пройти сюжетную историю, часто - романтическую.

Романсим всё, что движется. Что не движется - двигаем и романсим.

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

Буквально, луддит с установкой: «дед так писал, отец так писал, и я так буду».

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

функция str должна превращать всё, что угодно, в строку

Что за хрень ты несёшь?

Функция str должна петь голосом Паваротти, а если разработчику больше 14 лет – выводить на экран сиськи.

Ты всю тему засрал своим тупняком. Тебе уже объяснили много раз что такое str. Может хватит?

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

потому что str превращаёт всё в строку. а decode не всё. в этом была элегантность python. типизация не строгая, но динамическая. 13 это моя утка. 'abcde' это моя утка. эту утку у меня спёрли.

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

просто превращает всё в строку

Что значит «просто превращает всё в строку». Какое назначение у функции?

всё, кроме набора байтов в python3

Его в число превращает?

потому что str превращаёт всё в строку. а decode не всё

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

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

Ты всю тему засрал своим тупняком. Тебе уже объяснили много раз что такое str. Может хватит?

может хватит ломать то, что отлично работало? ну просто ради интереса, вдруг прогресс в другую сторону пойдёт?

я не вижу смысла повторяться.

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

utf-8 и ascii-7. второе собственное подмножество первого

ща системы «обычно» c utf-8 локалью

в python3(в реализации Сpython) унутри вроде как UTF-16 но глубже чем чем «asdfsadf»[index] - для индекса любой символ строки ровно одна позиция

основная проблема что в чисто ascii-7 python3 не даёт приемуществ подменной b' и u'

да даже если ты в стабильной байтовой локале где гарантированно взаимооднозначное byte<->char путь python2 более прямой

однако когда ты в «глобальном мире времени деревне» где везде utf-8 представление пересылки то проще когда внутрее представление сохраняет соответсвие индекс символ а не индекс<->внешнее_представление

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

в qbasic 90лохматого года str$ превращала в строку

в python 1/2 str превращала в строку

в python3 превращаёт всё в ИДЕНТИЧНУЮ строку, только добавляя b". кому она это добавляет?

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

Вызови няньку, чтоб сменили тебе постель. Раз уж у тебя утку спёрли.

я не вижу смысла повторяться.

… написал он в сотый раз и приготовился выкрикивать свой бред снова и снова.

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

Если я вызываю str на своих данных, где я точно знаю, что хочу получить, я хочу получить строку. Если там что-то кривое, ну тогда я дурак и дайте мне экспепшн. Почему везде и всегда это работало, на всех типах данных в python это работало, но в python3 именно на байтах это не работает?

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

то, что отлично работало?

работало-работало, а потом раз и мир вокруг изменился и работать перестало. Какая досада.

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

Еще раз. Опиши конкретную задачу, которую ты решаешь. В которой с одной стороны в переменной может оказаться произвольный тип не позволяя написать decode, но при этом это не сериализация, не вывод для отладки, и при этом присутствие b в результирующей строке для массивов байт что-то ломает.

Playermet
()
Последнее исправление: Playermet (всего исправлений: 1)
Ответ на: комментарий от alt-tab-let

>>>chr(13).decode
:)
>>>bytes(13)
:)
>>>bytes([13]).decode()

>>>bytes([77,66,55]).decode(encoding='latin')

>>>bytes([77,66,134]).decode(encoding='cp866')
qulinxao3 ★★
()
Последнее исправление: qulinxao3 (всего исправлений: 1)
Ответ на: комментарий от Playermet

В которой с одной стороны в переменной может оказаться произвольный тип

падай с эксепшном «я не строка, зачем ты на меня str позвал»

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

сори - приведи конкретный пример и ожидаемое(по опуту python2.7) поведение

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

Я просто морально не готов к потоку ахинеи

Поток ахинеи здесь несёшь ты. Ты просто слишком некомпетентен, чтобы это понять.

theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 1)
Ответ на: комментарий от alt-tab-let

кому она это добавляет?

Мне добавляет. Удобно для отладки просто написать print, который под капотом вызывает str, и сразу получить что хотел увидеть.

падай с эксепшном «я не строка, зачем ты на меня str позвал»

Что «падай с эксепшном»? На вопрос ответь нормально.

Playermet
()
Последнее исправление: Playermet (всего исправлений: 2)
Ответ на: комментарий от Playermet
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.
>>> str([1, 2, 3, { ‘vasya’: b’azaza’}, 5])
  File "<stdin>", line 1
    str([1, 2, 3, { ‘vasya’: b’azaza’}, 5])
                    ^
SyntaxError: invalid syntax
alt-tab-let ★★
()
Ответ на: комментарий от Playermet

А repr чем не угодил? И как мы жили в python2? Какой смысл это ломать, если есть repr и ещё куча способов отладки? Почему я просто не могу получить строку без b?

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

Что «падай с эксепшном»? На вопрос ответь нормально.

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

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

почти. str знает, что она строка. и она идеально её рендерит. только с кракозяблами. лучше выводить «тебе нужны кракозяблы. не знаю, зачем, и никто не знает, но они нужны»

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

SyntaxError: invalid syntax

Ты серьезно не можешь поправить кавычки после редактора Лора?

А repr чем не угодил?

Ничем. Просто беру и пишу print по привычке на всех языках.

Какой смысл это ломать

Ты так и не объяснил какая конкретно задача от этого ломается.

Почему я просто не могу получить строку без b?

Можешь. Берешь и вызываешь .decode(), потому что ты стопроцентно знаешь что у тебя массив байт. А если не знаешь, и при этом тебе важно конкретное представление - то у тебя либо задача сериализации в текст, либо задача отладки для проверки глазами.

если str не может дать строку, она её и не даёт

Это не ответ на мой вопрос. Я все еще жду.

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

Можешь. Берешь и вызываешь .decode(), потому что ты стопроцентно знаешь что у тебя массив байт. А если не знаешь, и при этом тебе важно конкретное представление - то у тебя либо задача сериализации в текст, либо задача отладки для проверки глазами.

также я могу переписать на java, c++, swift и так далее. так любую задачу можно решить. изначальный комментарий, из-за которого началась вся ненужная буча, был не в том, что я могу сделать, а в том, как криво это сделали в python3. всё. всё остальное, что я могу, я могу. если кто-то оправдывает «сделать более криво это круто», это ваше мнение. у меня - своё. и я его уже озвучил. раз 20. зачем мне объяснять, что это не криво, я не понимаю.

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

зачем мне объяснять, что это не криво

Очень криво, согласен. А теперь покажи пример задачи и код где это проявляется.

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

Это не ответ на мой вопрос. Я все еще жду.

я не понял, зачем ты используешь str?

«[1, 2, 3, {'vasya': 'azaza'}, 5]»

никаких b тут кстати нет, и ты вполне можешь оценить результат визуально

также как и строчку

f00f ты тоже можешь оценить визуально, никакие b'f00f' тебе не нужны. если нужны, ты используешь repr. почему b" для тебя какая-то сверхвысшая ценность, из-за которой у тебя ломается визуальное восприятие, я не знаю.

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

в python3 прикрутили unicode как базовое

если ты не сталкиваешься с кодировками (ака в US/UK) то ваще не заметно

ибо str будет обычными ascii-7 если конечно без эмоджЫ

боль(возможная) у эльфов когда в строке эмоджи - да и то не факт

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

я не понял, зачем ты используешь str?

Я уже написал выше зачем, несколько раз.

никаких b тут кстати нет

В python2 нет. В python3 будет.

ты вполне можешь оценить результат визуально

print str(123), str('123'), str(b'123') # 123 123 123

Замечательно проверил визуально. Огонь просто.

очему b для тебя какая-то сверхвысшая ценность

Мне так-то всеравно. А вот почему у тебя одного отсутствие b какая-то сверхвысшая ценность - не понятно. Тем более в контексте того что ты так и не смог сформулировать задачу для которой это имеет значение.

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

если ты не сталкиваешься с кодировками (ака в US/UK) то ваще не заметно

в том то и дело, что в python 2 если у тебя ascii-7, то ты вообще не заморачиваешься, ты можешь их сравнивать, можешь кидать туда-сюда. в python3 у тебя бесконечные encode-decode из одного в другое.

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

Мне так-то всеравно.

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

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

«Бреши в безопасности» очень уж коряво звучит

Правильнее «дыры», но некоторых эстетов коробит от простонародных дыр, и их заменяют на французские бреши :)

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

я про это и говорю. сломали поведение

Да что конкретно сломалось то?

важно для других

Для кого важно? Ты уже самы выше написал, что для отладки и сериализации есть другие функции. А если тебе не нужно знать тип выводимого значения, или тебе не важна обратимость, то тебе должно быть без разницы есть там b или нет, есть там кавычки или нет. Это ничего и нигде не ломает.

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

Меня вот лично сделала. До сегодня я правда не знал этого, вот прям сейчас озарение пришло. Лучшая фича питона3. Теперь твой аргумент про отсутствие довольных перестал работать.

страдать как и я

Эсли это и есть твоя задача, то так тому и быть.

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

Да что конкретно сломалось то?

str не переводит идетничную строке байтовую последовательность в строку, а добавляет отсебятину. вроде 26-й раз повторяю. в любом другом языке, включая python2, строки будут идентичны

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

Мне нужно превратить байты в идентичную строку. А вообще, мне нужно идти спать. На 27й круг я не выдержу. Мне придётся вернуться на visual basic 97, который мне выдаст мой психиатр.

alt-tab-let ★★
()
Ответ на: комментарий от alt-tab-let
[s:=''.join(map(chr,range(i:=1000,i+20))),print(f'{s!a}\n{s!r}\n{s!s}')]


print('!',s:=''.join(map(chr,range(i:=2000,i+20))), bytes(s,encoding='utf-8'))
print(':(',s:=''.join(map(chr,range(i:=1111,i+20))),end=''); print(bytes(s,encoding='latin1'))   

вот и всё

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

str не переводит идетничную строке байтовую последовательность в строку, а добавляет отсебятину.

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

Тебя кавычки вокруг строковых констант не напрягают? :)

olegd ★★★
()
Ответ на: комментарий от alt-tab-let
>>> class Test:
...     a = "санитары украли мою утку"
...     b = 13 # нипавизло, валяйся в фекальных массах
...     def __repr__(self):
...         return "Ты опять обгадился?"
>>> t = Test()
>>> str(t)
"Ты опять обгадился?"

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