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

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

Кстати, рекурсия не нужна в Питоне для этой операции, достаточно написать:

f = (lambda x: 1 if (x == 0) else reduce(lambda a, b: a*b, range(1, x+1), 1))
Естественно, перед этим нужно импортировать reduce (во второй ветке он был встроен).

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

Это называется «включил дурака».

Это называется «переходить на личности». Неужели других аргументов не осталось?

Именно - и это почти 100% гарантия ошибок компиляции для компилируемых и сбой запуска для других.

Суммарное число скобок не изменилось. А это почти 100% гарантия успешной компиляции. Если только мы не утащили этот кусок в другой файл.

При отсутствии сбоя огромный кусок кода поменяет выравнивание при автоформатировании.

Да! Те самые 4 шага. И, да, автоформатирование «решает» эту проблему. Проблему вызванную случайно перетянутой скобкой. Проблему, которая есть только из-за скобок. Проблему, которой нет в питоне.

Скобки используются для верификации семантики.

«Верифицируемость» — это проверка на совпадение. О совпадении чего с чем идёт речь?

Семантики нередактруемго участка получившейся после редктирования с семантикой нередактруемого участка до редактрования.

Мы ходим по кругу. Ещё раз. Правильно ли я понимаю: скобки позволяют мне вручную глазом проверить («верифицировать»), что после редактирования скобки соответствуют... чему? Отступам? То есть проверить по тому 4-шаговому алгоритму, да?

Но в нём мы смотрим на отступы, и просто проверяем, расставлены ли скобки в соответствии с отступами. Выходит, это благодаря отступам и автоформатированию можно проверить скобки. А что дают сами скобки? Кроме проверки правильности их расстановки.

В смысле, так ведь можно добавить в синтаксис ещё десяток бесполезных символов, и проверять правильность их расстановки. Но... ради чего?

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

Просто это единственная проблема, которая мне действительно попадалась.

Тут все ясно, проявление себя во всей красе.

А что не так? Сколько ты знаешь языков, появившихся после питона, но таких же популярных?

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

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

Так широко популярных — нисколько нет. Разве что C# может сравниться, но это как бы ответвление Явы, изначально — просто диалект.

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

Казалось бы, если питон такой популярный благодаря отступам, дизайнерам новых языков сам бог велел их тащить. Но нет, такого не происходит. Может питон популярен вовсе не из-за отступов, ты не задумывался об этом, анон? А к отступам люди привыкают так же как к begin end и прочим тараканам в голове дизайнеров ЯП.

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

переусложнённые лямбды не нужны.

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

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

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

только питонщики

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

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

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

Да что ж вы одно и то же повторяете... Откуда вы знаете, происходит это или нет?

Я и тебе повторю вопрос — а сколько языков ты знаешь, которые появились после питона? Даже иначе, сколько вообще языков ты знаешь? Слышал ли про F#, Haskell, CoffeeScript? Или экзотику, вроде Nim, Eero, FunL или Lobster?

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

А к отступам люди привыкают так же как к begin end и прочим тараканам в голове дизайнеров ЯП.

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

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

Во-первых, для этого надо понять с чем мы их сравниваем. По сравнению с JS — да, кастрированные, и для языка это оказалось плюсом. По сравнению с lisp или haskell — не особо. А по сравнению с лямбда-исчислением они даже перегружены возможностями.

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

Поэтому давай примеры. Не «в питоне лямбды кастрированные», а «на языке X я могу могу написать вот так [...], а на питоне нет». А то вдруг окажется, что на питоне оно напишется ещё лучше? 🙂

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

Это называется «переходить на личности». Неужели других аргументов не осталось?

Когда не замечая очевидного начинают исполнять мюзикл «ляля-тополя», акцентирование внимание на этом переходом на личности не является.

Исполняй дальше. Это весело читать.

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

Eero

Последний комит 6 дет назад.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.