Форум сайта python.su
Принт в третьем питоне не keyword. Просто функцию написать не трудно, а именно keyword добавить, это целый заглюк, потому что обязательно 100500 проектов использует его, как обычную переменную. Избавится от ключевого слова куда проще, чем добавить его, и то, на примере с print, это вызвало бурление говен, которое до сих пор не успокоилось.
Или вот пример из последнего: “async def” ничего не ломает, а если бы вместо него добавили “adef”, по аналогии с “await” и пр., то были бы жертвы среди мирного населения. Подумай об этом.
Офлайн
Так и не обязательно вводить новый терминал, достаточно функции.
Что до adef:
Офлайн
Shaman, то ли я плохо выразился, толи ты не захотел осмыслить написанное… Попробую немного разжевать.
Подумай, что случится, если добавить ключевое слово adef. Ключевые слова, это типа def, for, with… print, в устаревшем. вором, питоне. Попробуй написать “for = 1”. Так вот, весь код, в которому неповезло использовать переменную с именем “adef” придётся специальным образом портировать. А этого, замечу, не любит никто. Даже Чёрный Властелин.
А теперь домашнее задание: ответь, почему добавление кейвордов async def, async for, async with и await в 3.5 ничего никому не сломало? Ну кроме мозга новичкам и хейтерам, конечно. :-)
И, собственно, возвращаясь к теме, обсуждаемой в этом топике… “??”, это не ключевое слово, а оператор. Его можно добавить безопасно для имеющегося кода, потому что нигде в коде до 3.6 “??” использоваться не могут. Это SyntaxError и всё тут. А вот любое новое ключевое слово может и поэтому такое решение никогда не будет принято в третью ветку питона. Py4000? Возможно. И то, смотря на скорость перехода на тройку, Гвидо хорошо об этом подумает…
Офлайн
Функцию, кстати, можно и не вводить. Её писать три минуты. Но хочется чего-то более удобного.
Офлайн
ZZZБез разницы в котором месте и как вылезет ошибка, а она вылезет при каждом из подходов. Обратная совместимость подразумевает несколько иное поведение. Наверняка приставка ` ломала бы код не больше, а то и меньше async.
Так вот, весь код, в которому неповезло использовать переменную с именем “adef” придётся специальным образом портировать. А этого, замечу, не любит никто. Даже Чёрный Властелин.
А теперь домашнее задание: ответь, почему добавление кейвордов async def, async for, async with и await в 3.5 ничего никому не сломало?
Офлайн
Мне кажется, что ты не понял, что async вообще никак не сломал обратную совместимость. Т.е. абсолютно. От слова вообще. Я к тому, что нет никаких “не больше, а то и меньше”, потому что сравнивать с великим ничто как-то странно. Потому что нет никакой ложки ключевого слова “async”. :-)
И проблема расширения синтаксиса языка именно в том, чтобы сделать код, написанный до появления этих расширений, максимально совместимым с новым стандартом. Поэтому я написал, что новое ключевое слово, это вообще никак не выход, так как рвёт обратную на британский флаг и все начинают плакать горючими слезами.
А про обратную совместимость в разрезе добавления функции, я ничего не писал. Я писал лишь то, что функция это не так удобно и неинтересно – кому нужны эти скобочки! Стандартизировать то, что пишется за три минуты школьником, не надо. Я уверен, что на pypi можно найти подобное решение.
Офлайн
ZZZВ точку!
Стандартизировать то, что пишется за три минуты школьником, не надо.
In the body of a coroutine, any await and async identifiers become reserved keywords; await expressions, async for and async with can only be used in coroutine bodies.Признаюсь, до сих пор этого не читал. В топку такое решение! Зависимый от контекста синтаксис ведёт прямо в ад, к Черному Властелину! И отсутствие ругани на
>>> async = 1 >>> async def foo():pass
Отредактировано Shaman (Окт. 11, 2015 09:41:12)
Офлайн
Вот не соглашусь. Предложи решение лучше. Нет, я не издеваюсь и не саркастирую. Просто предлагаю порассуждать на эту тему.
Отсутствие ругани на твой код не так весело… Вот более весёлый пример:
await = 1 async def func(): await some_coro
Отредактировано ZZZ (Окт. 11, 2015 11:26:50)
Офлайн
ZZZОдно уже предлагал:
Предложи решение лучше
`def
as def
Офлайн
Очень не явный синтаксис. Будет тяжело читаться.
Но и это не всё. Чем ты заменишь await?
Офлайн