Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 10, 2015 20:51:58

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

PEP 0505 -- None coalescing operators

Принт в третьем питоне не keyword. Просто функцию написать не трудно, а именно keyword добавить, это целый заглюк, потому что обязательно 100500 проектов использует его, как обычную переменную. Избавится от ключевого слова куда проще, чем добавить его, и то, на примере с print, это вызвало бурление говен, которое до сих пор не успокоилось.
Или вот пример из последнего: “async def” ничего не ломает, а если бы вместо него добавили “adef”, по аналогии с “await” и пр., то были бы жертвы среди мирного населения. Подумай об этом.



Офлайн

#2 Окт. 10, 2015 21:25:14

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

PEP 0505 -- None coalescing operators

Так и не обязательно вводить новый терминал, достаточно функции.
Что до adef:

Офлайн

#3 Окт. 10, 2015 22:16:53

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

PEP 0505 -- None coalescing operators

Shaman, то ли я плохо выразился, толи ты не захотел осмыслить написанное… Попробую немного разжевать.
Подумай, что случится, если добавить ключевое слово adef. Ключевые слова, это типа def, for, withprint, в устаревшем. вором, питоне. Попробуй написать “for = 1”. Так вот, весь код, в которому неповезло использовать переменную с именем “adef” придётся специальным образом портировать. А этого, замечу, не любит никто. Даже Чёрный Властелин.
А теперь домашнее задание: ответь, почему добавление кейвордов async def, async for, async with и await в 3.5 ничего никому не сломало? Ну кроме мозга новичкам и хейтерам, конечно. :-)
И, собственно, возвращаясь к теме, обсуждаемой в этом топике… “??”, это не ключевое слово, а оператор. Его можно добавить безопасно для имеющегося кода, потому что нигде в коде до 3.6 “??” использоваться не могут. Это SyntaxError и всё тут. А вот любое новое ключевое слово может и поэтому такое решение никогда не будет принято в третью ветку питона. Py4000? Возможно. И то, смотря на скорость перехода на тройку, Гвидо хорошо об этом подумает…



Офлайн

#4 Окт. 10, 2015 22:25:02

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

PEP 0505 -- None coalescing operators

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



Офлайн

#5 Окт. 10, 2015 23:41:17

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

PEP 0505 -- None coalescing operators

ZZZ
Так вот, весь код, в которому неповезло использовать переменную с именем “adef” придётся специальным образом портировать. А этого, замечу, не любит никто. Даже Чёрный Властелин.
А теперь домашнее задание: ответь, почему добавление кейвордов async def, async for, async with и await в 3.5 ничего никому не сломало?
Без разницы в котором месте и как вылезет ошибка, а она вылезет при каждом из подходов. Обратная совместимость подразумевает несколько иное поведение. Наверняка приставка ` ломала бы код не больше, а то и меньше async.
Проблема не в использовании ключевых слов, а заметности (что почти тождественно очевидности) конструкции и её можно организовать.
С другой стороны, наверное неправильно от Питона ожидать прямоты Лиспа.

Офлайн

#6 Окт. 11, 2015 01:08:39

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

PEP 0505 -- None coalescing operators

Мне кажется, что ты не понял, что async вообще никак не сломал обратную совместимость. Т.е. абсолютно. От слова вообще. Я к тому, что нет никаких “не больше, а то и меньше”, потому что сравнивать с великим ничто как-то странно. Потому что нет никакой ложки ключевого слова “async”. :-)
И проблема расширения синтаксиса языка именно в том, чтобы сделать код, написанный до появления этих расширений, максимально совместимым с новым стандартом. Поэтому я написал, что новое ключевое слово, это вообще никак не выход, так как рвёт обратную на британский флаг и все начинают плакать горючими слезами.

А про обратную совместимость в разрезе добавления функции, я ничего не писал. Я писал лишь то, что функция это не так удобно и неинтересно – кому нужны эти скобочки! Стандартизировать то, что пишется за три минуты школьником, не надо. Я уверен, что на pypi можно найти подобное решение.



Офлайн

#7 Окт. 11, 2015 09:33:27

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

PEP 0505 -- None coalescing operators

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
ведёт туда же, к PHP.

Отредактировано Shaman (Окт. 11, 2015 09:41:12)

Офлайн

#8 Окт. 11, 2015 11:26:26

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

PEP 0505 -- None coalescing operators

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

Отсутствие ругани на твой код не так весело… Вот более весёлый пример:

await = 1
async def func():
    await some_coro
Но на практике, это не создаёт проблем.



Отредактировано ZZZ (Окт. 11, 2015 11:26:50)

Офлайн

#9 Окт. 11, 2015 16:04:51

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

PEP 0505 -- None coalescing operators

ZZZ
Предложи решение лучше
Одно уже предлагал:
`def
Есть ещё вариант:
as def

Офлайн

#10 Окт. 11, 2015 17:49:15

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

PEP 0505 -- None coalescing operators

Очень не явный синтаксис. Будет тяжело читаться.
Но и это не всё. Чем ты заменишь await?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version