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

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

Почему-то при описании данных вы ими не брезгуете, в чем дело?

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

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

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

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

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

да писали тут уже насчет объявления

if (int foo = 42, bar = 24; f(foo, bar))
раньше извращенцы for использовали для такого развесистого. С учетом того, сколько в такого рода строчку можно говнокода затолкать, чувство счастья во мне эти нововведения не вызывают.

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

раньше извращенцы for использовали для такого развесистого.

#define iff(...) for (__VA_ARGS__;) {
#define endiff break;}

iff (int foo = 42, bar = 24; f(foo, bar))
	// ...
endiff

Эх, красота-то какая! Лепота!

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

мало того что говнокод

яхудожникятаквижу

еще и вечный цикл

нет, смотри внимательней:

#define endiff break;}
anonymous
()
Ответ на: комментарий от olelookoe

а слабо без endiff? а с поддержкой else? )

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

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

ну вот, а теперь лови креатив не только в for, теперь старый добрый if тоже испоганят.

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

Первые два выглядят вполне годно, особенно Allman.

Ок, пусть будет Allman, в с/с++ я тоже предпочитаю его. Итак, сравниваем:

for (int i = 0; i < 100; ++i)
{
    if (i % 7 == 0)
    {
        dosomething(i);
    }
    else
    {
        doother(i);
    }
}

Против питона:

for i in range(100):
    if i % 7 == 0:
        dosomething(i)
    else:
        doother(i)

Код на сях выглядит так же, но занимает ВДВОЕ больше места.

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

Какие преимущества дают эти скобки?

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

Пример вырожденный. Однострочные блоки на сях тоже можно написать без скобок и без потери однозначности.

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

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

Однострочные блоки на сях тоже можно написать без скобок и без потери однозначности.

Нет, нельзя. Ну, можно, но мы рискуем нарваться на:

if (key == 42)
    if (version > 3)
        throw std::logic_error("Deprecated key, don't use it");
else
    addToList(key, value);

Это почти пример из реального кода. И на питоне это было бы правильно. А на сях это выглядит правильно, и даже скомпилится, но работать будет неверно. Догадаешься, почему? 😉

а вот разбираться с питоньими сдвигами — чревато ошибками.

Так вот, получается, что как раз скобочный синтаксис приводит к ошибкам. И занимает лишнее место. А какие у него преимущества?

Сможешь привести пример, когда питоновые отступы вызывают ошибки?

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

Догадаешься, почему?

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

Сможешь привести пример, когда питоновые отступы вызывают ошибки?

Первое, что приводит в голову — смешивание пробелов и символов табуляции. Да, написавший такой код — ССЗБ, но в том и дело, что его халтура сразу в глаза не бросается.

А если нужно набрать программу из книжки? Мерять отступы линейкой?

hobbit ★★★★★
()

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

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

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

for i in range(100):
| if i % 7 == 0:
| | dosomething(i)
| else:
| | doother(i)

Против такого ты бы не возражал?

другой анонимус

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

Выглядит интересно. Хотя визуально, пожалуй, более перегружено, чем скобки (не по вертикали, правда, а по горизонтали).

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

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

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

Первое, что приводит в голову — смешивание пробелов и символов табуляции. Да, написавший такой код — ССЗБ, но в том и дело, что его халтура сразу в глаза не бросается.

Можно пример? А то у меня она очень бросается — питон на такой файл выдаёт ошибку парсинга:

TabError: inconsistent use of tabs and spaces in indentation

А если нужно набрать программу из книжки? Мерять отступы линейкой?

Вроде, тоже никаких проблем. Всё видно невооружённым глазом. Или речь о какой-то конкретной книге?

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

TabError: inconsistent use of tabs and spaces in indentation

О! Это в третьем питоне такое ввели, как я понимаю? Ну... тогда, наверное, окей. Одной причиной бояться питона стало меньше.

Всё видно невооружённым глазом.

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

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

Какие преимущества дают эти скобки?

Сишникам платят построчно же

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

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

Оно обычно как-то так и выглядит: Eclipse, Netbeans, Vim. 🙂

Редактор их так и показывает. И не только для питона, а вообще для всех языков.

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

Так одно дело представление в редакторе, и совсем другое — символ в файле.

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

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

Так пример в студию же! А то всё, что мне удаётся нагуглить — отлично читается глазом.

Это в третьем питоне такое ввели, как я понимаю?

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

Ну... тогда, наверное, окей. Одной причиной бояться питона стало меньше.

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

Мне в голову против табуляций только одна идея приходит: форсированные отступы сильно затрудняют написание кода в стиле «однострочников». Но, по-моему, это больше плюс, чем минус.

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

Экономим на скобках!

Вот! Это уже другой стиль расстановки. И в этом случае ненужность скобок становится почти очевидна.

В варианте allman-а скобки визуально выделяли блок. А при таком стиле код читается уже только по отступам. И скобки в нём — синтаксический мусор. Без подсветки в IDE сразу и не скажешь, у какой скобки где пара.

Так если мы всё равно читаем код по отступам, то... зачем скобки?

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

против табуляций

Послушал на днях про интерфейсы. Говорят, отношения элементов данных следует проецировать во взаимное расположение/растояние отображений оных. Человекам будет сильно проще понимать.

Скобочники задают отношения многочисленными скобками хзгде. Это историческо оправдано(когда-то программы печатались). Но бесчеловечно и грязно. Но программы могут легко исправить. Но не (все это)? делают.

В питонах отношения засунуты в отступы. Но лишь некоторые и только 1го типа данных, и ‘:’ ещё менее заметна, чем ‘{’. Не прорыв в юзабилити.

Хаскель чуть лучше – там выравнивание говорит аж об 2х вещах(если перенос считается) – хоть начало блока оправдано. Всё равно на идеал не тянет.

Похоже, нужно полностью отвязывать синтаксис от отображения. Только непонятно как потом эффективно мапить последнее на кнопки – отсутствие явного соответствия вводимого отображаемому кажется существенной потерей. А может и зря.

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

Так если мы всё равно читаем код по отступам, то... зачем скобки?

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

bread
()
Ответ на: против табуляций от DonkeyHot

В питонах отношения засунуты в отступы. Но лишь некоторые

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

bread
()

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

дядя, ты дурак?

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

дядя, ты дурак?

Эрик Рэймонд в своей книге разъяснил, почему невидимые значащие символы — плохо. Правда, позже начал топить за питон, предав собственные принципы.

Владимiр

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

Веришь, бро - проекту 12 лет, полмиллиона строк, проблем с отступами нет. Были проблемы с разными ошибками в разных версиях Qt, есть небольшая проблема с изменениями в PyQt, есть проблема с клиентами, которые не готовы выкинуть WinXP.

Да, отступы требуют внимания. Но скажи, что в коде на C фигурные скобки не требуют внимания. Они точно также требуют внимания.

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

в цветах темы это всегда в близком оттенке с бэкграундом

третий анонимус

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

позже начал топить за питон

О том и речь: проблемы с отступом - у теоретиков. Кто начинает практиковать, тот обнаруживает что ВНЕЗАПНО проблемы нет.

предав собственные принципы

Дурак тот кто не учится. Он научился.

anonymous
()

Совместимость по прежнему ломают?

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

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

невидимые значащие символы

Они не невидимые. Видишьразницуэтогопредложенияспредыдущим? Какая же это невидимость?

С отступами ещё веселее – мозги склонны находить разные фигурки(в данном случае вертикальные линии) в чём попало. Почему не употребить это?

DonkeyHot ★★★★★
()
Ответ на: невидимые значащие символы от DonkeyHot

Они не невидимые. Видишьразницуэтогопредложенияспредыдущим? Какая же это невидимость?

Они именно что невидимые. Угадать, что они есть, можно лишь при наличии рядом видимых символов, что ты и продемонстрировал.

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

Угадать, что они есть, можно лишь при наличии рядом

Иными словами, они видимые в том случае, когда «рядом что-то есть» и невидимы, если рядом никого. Это же замечательно – символы прячутся, когда не нужны и проявляются, когда понадобились. Не то, что скобки – царапают глаза, даже если внутри никого:)

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

таб или спейсы

Отвлекаться на несущественное – удел писателей низкого уровня. Что офтопик.

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

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

Там была старая recaptcha, которую google закрыл давно.

Понятно. Жаль.

Чего тут понятного? Да, действительно гугл закрыл старую капчу, что тогда использовалась на лоре, только вот никто не заставляет пользоваться капчей именно от Гугла. Только не надо опять пугать тупыми страшилками что мол боты разгадывают все капчи кроме гугловской.

#t15290486

anonymous
()

Щас бы в 2к19 дискутировать о скобках/отступах в питоне. Пишу два года на питоне и ни разу не испытывал неудобств из-за отступов, до этого два года писал на джаве.

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

Код не только читают,

Ну ещё его пишут. Но перед этим его всё равно надо прочитать. 🙂

и не всегда читают только по отступам.

Разве? Сейчас хорошее форматирование — это норма в любом языке, хоть С++, хоть в Java. И из личного опыта — код сначала читают по отступам. И только если эта попытка зафейлилась, если код отформатирован в каком-нибудь диком стиле, только в таком крайнем случае смотрят на скобки.

Скобки это контрольные символы, они дают свободу переформатирования

А что такое «переформатирование»? Другая расстановка скобок? Тогда это звучит странно. Скобки дают свободу расстановки скобок...

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

и уменьшают вероятность случайных ошибок.

А вот тут можно пример? А то выше есть примеры того, что скобочный синтаксис УВЕЛИЧИВАЕТ вероятность случайных ошибок.

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

А мне вот так нравится

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

Indent with tabs, align with spaces

Это к любому языку относится, не только к питону.

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

Да, отступы требуют внимания. Но скажи, что в коде на C фигурные скобки не требуют внимания. Они точно также требуют внимания.

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

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

Щас бы в 2к19 дискутировать о скобках/отступах в питоне

Действительно, и так ясно, что разграничение блоков через подсчет невидимых символов в начале строки это красивая, но тупая идея, не учитывающая множество нюансов. Так часто бывает: красивая и тупая, селяви. Можно только принять как данность — вот есть язык с такими-то тараканами, ничо не поделать. Бесит когда начинают культ из такого говна лепить.

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

это красивая, но тупая идея, не учитывающая множество нюансов

Ну так назови нюансы-то. И, пожалуйста, с примерами.

А то тут говорят про ошибки, а примеры почему-то говорят об обратном.

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

Вы всё ещё судите о Питоне по ветке 2? %) Все крупные проекты уже переехали, многие ещё 3—4 года назад. И потом эти люди рассказывают нам, что Си++ — это очень хороший язык, так как есть Си++14 и даже Си++17!

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

Ну так назови нюансы-то. И, пожалуйста, с примерами.

Простой пример.

Вуделил кусок кода - перенес.

Не заметил как оторвал лишний таб у следующей строки и она оказалась не под условием.

Код остался валидным.

Понятно, что кто работает с отступами привык смотреть на это.

Но гораздо лучше когда за тебя проверяет машина.

Автоформатирование сейчас вообще-то развилось до юзабельности.

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

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

Народ-то пишет и продолжает использовать. Все такие тупые-тупые!

Какой народ? Я знаю только еще один ЯП с таким тупым синтаксисом, это nim. Всё, больше никого не соблазнили.

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