LINUX.ORG.RU

Релиз Python 3.8

 


3

2

Наиболее интересные новшества:

  • Присваивающее выражение:

    Новый оператор := позволяет присваивать значения переменным внутри выражений. Например:

    if (n := len(a)) > 10:
        print(f"List is too long ({n} elements, expected <= 10)")
    

  • Positional-only аргументы:

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

    def f(a, b, /, c, d, *, e, f):
        print(a, b, c, d, e, f)
    
    f(10, 20, 30, d=40, e=50, f=60) # OK
    f(10, b=20, c=30, d=40, e=50, f=60)   # ошибка, `b` не может быть именованным аргументом
    f(10, 20, 30, 40, 50, f=60)           # ошибка, `e` обязан быть именованным аргументом
    
    Это изменение дает разработчикам способ обезопасить пользователей своих API от изменений в названии аргументов функций.

  • Поддержка f-строками = для самодокументирующих выражений и отладки:

    Добавлен сахар для упрощения отладочных/логгирующих сообщений.

    n = 42
    print(f'Hello world {n=}.')
    # напечатает "Hello world n=42."

  • Исправлено ключевое слово continue в блоке finally (раньше оно не работало).

Прочее:

  • Можно явно указать путь к кэшу байткода вместо дефолтного __pycache__.
  • Debug и Release сборки используют один и тот же ABI.

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

anonymous

Проверено: a1batross ()
Последнее исправление: cetjs2 (всего исправлений: 5)
Ответ на: комментарий от anonymous

Популисты по этому поводу говорят - «Мы заботимся о вас».
Кстати и крокодил «умеет слезу пустить».

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

Критикую := потому, что явно «дилетантский» подход к проектированию архитектура языка программирования.

у вас редкий талант - критиковать то, чего уже давно нет. Уже все забыли что это такое - проектировать ... каждую неделю релиз - вот это архитектура, вот это проектирование ;) Свежайший говнософт - наше всё.

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

Уже все забыли что это такое - проектировать ...

Есть «разработчики» и есть «новаторы».

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

из-за := читабельность снизилась вместе с дебаггельностью

зато у какого-то хлыща из core team повысилось бабло вместе самомнением

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

Строки в 3.0 не сломали, а починили. А то, что было раньше - натуральная шиза, генерирующая ошибки на ровном месте. Что тебя не устраивает-то?

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

каждую неделю релиз

а шо ж вы хотели? все погрязли в энтих VCS, и все планирование-проектирование сводится к веткам-форкам-коммитам

запало что-то в душу - бац, готова новая ветка, «проект» типа

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

С этим я полностью согласен. := выглядит крайне отвратительно. Хотя бы разделили определение переменной и её проверку.

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

запало что-то в душу - бац, готова новая ветка, «проект» типа

Если сапожник возьмется чинить «Запорожец», то из него получится маленький экскаватор.

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

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

IRL не существует проблемы с ошибочным присваиванием в условии, потому что: ключи компилятора, code review, unit tests. Вероятно когда-то это имело место, однако сейчас осталась только у старых преподавателей у доски, которые последние лет тридцать продакшен кода не писали.

ЗЫ ты сам там писал, что хреново, но привыкнуть можно. Так вот, привыкать не нужно == читать невозможно.

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

А что конкретно было? Я с 2.6 перешёл сразу на 3.2 и что-то не могу вспомнить, что там было не так до 3.3

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

Было бы каррирование называлось бы это хаскелем

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

запало что-то в душу - бац, готова новая ветка, «проект» типа

появление не проблема - пусть себе появляется. Проблема в том, что «это» кто-то тут же «бац-бац» и в продакшен.

Итогом будет необходимость постоянно-перманентных автоматически-принудительных обновлений ... ну как в 10 винде. В винде это делается просто элементарным принуждением, а в якобы «свободном» софте вынуждают проще - если сегодня не обновился, то завтра уже ничего не работает.

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

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

Не было u'' и в 3.2 как раз дофига всего пофиксили в стрингах.

Мне даже запомнилась строчка в «what’s new»:

countless fixes regarding bytes/string issues; among them full support for a bytes environment (filenames, environment variables)

Конкретику уже не упомню, ибо и не юзал толком, только читал, пробовал, бомбил. Можешь сам поискать в changelog’е, если интересно.

Я, кстати, тоже с 2.6 перепрыгнул, но аж на 3.5, а полностью только на 3.6.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 2)

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

Пахнет перлом

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

Понятно. Ну да, свежая ветка, все сырое. Хотя я не очень понимаю бомбежки по этому поводу. Переплатили язык и кишки интерпретатора - понятно, что будут баги. Никто же не заставлял насильно переходить на третью ветку со второй, пока она не стабилизировалась. Мы 3.2 уже использовали в хайлоадном продакшне, с 3.4 стало вообще хорошо жить. Дроп второй ветки был объявлен только после того, как на третью портировали подавляющее большинство библиотек. А если в дистре выкидывают вторую ветку заранее - так это проблемы дистра, а не языка.

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

Мы 3.2 уже использовали

Но зачем?

До 3.5 у 3к никаких значимых преимуществ не было. К тому же, все в первую очередь поддерживали 2.7 в библиотеках.

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

IRL не существует проблемы с ошибочным присваиванием в условии, потому что: ключи компилятора, code review, unit tests.

Норм программируют там, где это профильный бизнес. Ты давно (или никогда) не видел говно-легаси-боевой код, который тестами покрыт процентов примерно на 0, код-ревью последний раз был никогда, все писано слоями шестью разными людьми, под вдохновением от прочтения разных глав из книжки «с++ за 21 день», их уже давно в конторе нет, есть ждуниор, который, будучи не в силах, сам офигевает от происходящего, «у нас все работало, памагити!»(с).

Или нарушения правил публикации под девизом «ну нам же срочно надо было!»(тм), а из всех ключей релизной сборки только -Ofast. А потом «ура, заработало! - ой, ля, откатываем нах!»

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

ЗЫ ты сам там писал, что хреново, но привыкнуть можно.

ЗЫ писал, но совсем другое.

olelookoe ★★★
()

усложнение синтаксиса :(

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

Затем, что проблема юникода в 2.x порождала UnicodeEncodeError - один из самых распространенных и вымораживающих багов, благодаря которому питон приобрел репутацию «язычка, который сыпет исключениями».

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

В терминальных случаях перенос становится крайне сложным и почти невозможным. Каноничный пример - меркуриал, и то, что с ним в итоге стало.

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

Кстати, в 2.7 много чего пофикшено, что можно писать универсальный код (который понимается, и 2.7, и 3.3+ что-ли) даже без six. Ну, если очень нужна переносимость скрипта.

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

Да, но смысла уже почти нет. Уже везде есть как минимум 3.4, почти везде - 3.6. Системы без 3.4 это какой-то лютый легаси или продукт жизнедеятельности ленивых админов. В первом случае проблема действительно имеет место быть, если нужен универсальный скрипт, во втором случае админа надо отправлять в макдак, потому что, вероятно, секур-апдейты он тоже на накидывает :)

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

один из самых распространенных и вымораживающих багов

В кривых руках. Я если и напарывался, то только в самом начале, даже не помню такого.

уход второй ветки со сцены будет лишь вопросом времени

Ясно дело, но до 3.3-3.4 там просто нечего было ловить, а реальный смысл появился только в 3.5, тогда уже и пошел массовый сдвиг по отказу от легаси.

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

В кривых руках

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

реальный смысл появился только в 3.5

Я же в том же каменте написал - смысл в стоимости поддержки. Чем дольше ты откладываешь, тем больше кода придется переносить. Если по фичам 3.2 был равен 2.6, то какой смысл начинать писать на 2.6 новый проект, если потом все равно придется переделывать?

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

Более реальный пример:

map(str.lower, list_of_strings)
anonymous
()
Ответ на: комментарий от liksys

Новый и не нужно, но нет особого смысла стараться переносить старый.

Чем дольше ты откладываешь, тем больше кода придется переносить

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

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

Если старый проект долгоживущий, придется переписывать, потому что поддержка 2.x скоро откинется.

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

вполне нормальное решение

Из-за этого «нормального решения» появились костыли в виде тегов в структурах. Самое позорное и кривое, что есть в Go.

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

Так я про времена 3.2 говорю, а вообще, будь уверен, 2.7 всё равно ещё лет 5 никуда не денется. На вскидку не помню вообще ничего, но периодически подмечаю, что какие-то проекты до сих пор на 2.6-7. И есть ещё как минимум PyPy, Cython тоже дропать двойку пока не торопится.

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

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

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

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

Еще и на порядок быстрее будет. Вообще на тройку не захотят.

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

А человеческого switch case так и нет. Кто-то может объяснить почему?

В питоне есть if-elif-else — это универсальнее, так как позволяет более сложные условия:

if x == 0:
   ...
elif 5 <= x <= 9:
   ...
elif x % 3 == 2:
   ...
else:
   ...

Switch-case в этом плане ничего нового не даёт.

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

Админы на дебианах в лёгкую поставят python3.8, куча способов, в следующем релизе Debian ваще пакет из коробки будет, “python3.8”

menangen ★★★★★
()

Больше костылей богу костылей.

no-such-file ★★★★★
()
Ответ на: комментарий от olelookoe

которое уже пылью покрылось от древности

Присоединяюсь, я чё-то тоже не понял прикола.

no-such-file ★★★★★
()
Ответ на: комментарий от exst

Не нужно.

Приходится терпеть... Ведь ничего лучше-то нет.

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

Админы на дебианах в лёгкую поставят python3.8

В комплект к 2.7, 3.6 и 3.7 Чё уж там, нужно к каждому скрипту, сразу весь интерпретатор c библиотеками в snap пихать и не париться.

no-such-file ★★★★★
()
Ответ на: комментарий от hobbit

А операторные скобки не завезли, чтобы невидимые символы не считать?

А парные-непарные скобки считать легче?

Мне очень любопытно, какой стиль скобок вы предпочитаете? K&R? Allman? Или может https://i.redd.it/oq92qtpn1kf21.jpg ?

anonymous
()

Копирование-вставка кода с пробелами и табуляцией в консоли до сих пор ломает программу?

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