LINUX.ORG.RU

Python 3.13

 , ,


0

4

После года разработки вышла новая стабильная версия интерпретируемого языка программирования 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)

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

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

alt-tab-let ★★
()

экспериментальная поддержка работы в режиме free-threaded (т. е. с отключением global interpreter lock) (PEP 703), и JIT-компилятор (PEP 744).

О, это мы романсим. Есть надежда что это ускорит то что не может ускорить numba (половину всего). Из интересного там еще статические аттрибуты будут доступны через self, но это уже для гурманов.

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

Python 3000, он же Python 3 появился 20 лет назад, ныть о чем-то, что кто-то что-то сломал через 20 лет после того как объявили, что Python 3 будет единстивенным правильным питоном архиглупо

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

Я не ною. Я назвал решение неадекватным. Но я с ним смирился, надо будет ещё с этим связываться, свои обёртки напишу.

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

Он никогда не был элегантным он достаточно уродлив…


Примеры от DeepSeek

Python — это язык программирования, который известен своей простотой и читаемостью. Однако, как и любой другой язык, у него есть свои особенности и «подводные камни», которые могут показаться нелогичными или неочевидными для разработчиков. Вот несколько примеров таких моментов:

1. Деление целых чисел

В Python 2 деление целых чисел возвращает целое число, даже если результат не является целым. Это может быть неожиданным:

print(5 / 2)  # Вывод: 2 в Python 2

В Python 3 это поведение было изменено, и деление целых чисел возвращает число с плавающей точкой:

print(5 / 2)  # Вывод: 2.5 в Python 3

2. Область видимости переменных

В Python переменные, определенные внутри блока if, for, while и других конструкций, доступны вне этих блоков:

if True:
    x = 10
print(x)  # Вывод: 10

Это может быть неожиданным, если вы привыкли к более строгой области видимости, например, в языках C или Java.

3. Сравнение разных типов

В Python можно сравнивать объекты разных типов, что может привести к неожиданным результатам:

print(1 < 'a')  # Вывод: True

Это происходит из-за того, что строки в Python всегда «больше» чисел.

4. Изменяемость и неизменяемость

Некоторые типы данных в Python являются неизменяемыми (например, int, str, tuple), а другие — изменяемыми (например, list, dict, set). Это может привести к неожиданным результатам при работе с этими типами:

a = (1, 2)
b = a
b += (3,)
print(a)  # Вывод: (1, 2)
print(b)  # Вывод: (1, 2, 3)

В этом примере кортеж a остается неизменным, даже если мы изменили b.

5. Поведение is и ==

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

a = [1, 2, 3]
b = a
print(a is b)  # Вывод: True
print(a == b)  # Вывод: True

c = [1, 2, 3]
print(a is c)  # Вывод: False
print(a == c)  # Вывод: True

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

6. Поведение None

В Python None — это специальный объект, который часто используется для обозначения отсутствия значения. Однако, сравнение None с другими значениями может быть неочевидным:

print(None == None)  # Вывод: True
print(None is None)  # Вывод: True
print(None == False)  # Вывод: False
print(None == 0)  # Вывод: False

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

7. Поведение and и or

В Python операторы and и or возвращают не булевы значения, а один из операндов:

print(1 and 2)  # Вывод: 2
print(1 or 2)  # Вывод: 1

Это может быть неожиданным, если вы ожидаете, что and и or всегда будут возвращать True или False.

8. Поведение += и -=

Операторы += и -= могут вести себя по-разному в зависимости от типа данных:

a = [1, 2]
b = a
a += [3]
print(a)  # Вывод: [1, 2, 3]
print(b)  # Вывод: [1, 2, 3]

a = (1, 2)
b = a
a += (3,)
print(a)  # Вывод: (1, 2, 3)
print(b)  # Вывод: (1, 2)

В этом примере += изменяет список a, но создает новый кортеж для a.

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

Речь не про чукчу писателя, а про чукчу читателя. Он приятен глазу. А когда у тебя x(y.encode('utf-8').decode('utf-8'), глазам больно

alt-tab-let ★★
()
Ответ на: комментарий от alt-tab-let
>>> a = 'abcde'
>>> str(a)
'abcde'
>>> print (str(a))
abcde
>>> str(str(str(a)))
'abcde'

шарман

однозначность так и сквозит. при том, что в py2 всё было однозначно

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

я когда первый раз это увидел, чуть с кровати не упал

не должно изменение типа менять содержимое. просто не должно. закон такой. я не знаю, где ещё в мировой истории изменение типа меняет содержимое

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

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

А что такое обратная совместимость ? Это когда мне для сборки нужен gcc-11 и выше а на gcc-7 я собрать не могу ?

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

Мда … :(

Вы в курсе что такое >>>

Отгадай те с 3х раз что выведет скрипт питона: python3 -c «str(‘a’)»

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

в python 2 ascii лез из всех щелей, именно поэтому были отдельные юникод строки. python 3 решил проблему кодировок.

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

В том то и дело, что при рендеринге текста не должно быть b'. Когда ты просто нажал a, то должно быть b, это нормально, во втором были u

Но когда ты делаешь print (str(a)), оно должно быть без всяких Б

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

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

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

2. Область видимости переменных

я не понял, как именно, но у меня код на python 2.7, который работал ещё полчаса назад, перестал видеть переменную вне блока. я обратно возвратил исходный файл, но он всё равно тупо не видит. 10 лет видел, полчаса назад видел, а сейчас не видит! это бред полный, и как это и почему я вообще не понимаю.

alt-tab-let ★★
()
Ответ на: комментарий от alt-tab-let
    codecs.open(outcount(),'w','utf-8').write( '\n'.join(buf) )
NameError: name 'buf' is not defined

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

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

не, ну это несусветный бред. за полчаса изменились законы природы. python тот же самый, код тот же самый, 10 лет работал, и вдруг тупо не видит переменную в блоке.

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

всё оказалось проще, это я тупой.

что логично.

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

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