LINUX.ORG.RU
ФорумTalks

Всё слаще и слаще

 


0

2

Было:

m = re.match(p1, line)
if m:
    return m.group(1)
else:
    m = re.match(p2, line)
    if m:
        return m.group(2)
    else:
        m = re.match(p3, line)
        ...


ent = obj.next_entry()
while ent:
    ...   # process ent
    ent = obj.next_entry()

В 3.8 можно будет:

if m := re.match(p1, line):
    return m.group(1)
elif m := re.match(p2, line):
    return m.group(2)
elif m := re.match(p3, line):
    ...

while ent := obj.next_entry()
    ... # process ent

https://lwn.net/SubscriberLink/793818/0c6f9dd271021cd4/

При Гвидо такого не было.

★★★★★

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

Да, точно, PEP 572, как говорится «и не в лотерею, а в преферанс, и не выиграл, а проиграл».

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

В первый раз что ли. А вообще это вопрос нумерации, релиз раз в год на минорный не тянет.

vvn_black ★★★★★
() автор топика

При Гвидо такого не было.

Главное чтоб старое не ломали, а новое няхай наворачивают.

if
elif
elif

А вот здесь уже давно пора CASE завезти, так что ещё есть куда сластить.

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

Еще чуть-чуть и они почти достигнут уровня перла 2005 года...


Хотя нет...2005 слишком... '99 смогкт думаю...

Jetty ★★★★★
()

Было ...

... неправильно. После:

def first(iterable):
 for i in iterable:
  if i: return i

def matcher(*regexes):
 rs = [re.compile(i).match for i in regexes]
 def match(line): #чтобы 2 раза не компилить
  m = first(i(line) for i in rs)
  return m.re.pattern,m
 return match
всё и так не плохо(если выбрать документирующие имена для RE*):
RE1=r'...'
RE2=r'...'
...
pattern,match = matcher(RE1,RE2,...)(line)
if pattern == RE1:
 return match.group(1)
elif pattern == RE2:
...

DonkeyHot ★★★★★
()

obj.next_entry тоже неправильный:

for ent in iter(obj.next_entry):
  #process ent

DonkeyHot ★★★★★
()

Изящное решение задачи присваивания в условии if, которое не позволяет, в отличие от того же C/C++, совершать дебильных ошибок из-за случайной замены '=' на '==' и наоборот.

Питон божественен!.. Гвидо бог!..

Ещё бы завезли туда «из коробки» проверку наличия имени в скоупе, дабы не ловить падения программы в рантайме из-за глупых опечаток вида:

def division(numinator, denominator):
    return numinator/denimonator

print(division(1,2))

По крайней мере, у меня это самый распространённый вид ошибки...

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

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

Надо было as юзать. Больше операторов присваивания богу присваивания.

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

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

WitcherGeralt ★★
()

Банальнейший, известный всем со времён палеозоя pattern matching делает это всё ненужным.

line match {
  case pattern1(group1) => group1
  case pattern2(_, group2) => group2
  case pattern3(group1, _, group3) => group1 + group3
}
Zenom ★★★
()
Ответ на: комментарий от eternal_sorrow

Даже если завезут «case», пистон всё равно не дотянет до руби, ибо останется недообъектным и полудинамическим.

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

в чём самоценность «настоящего» ООП? почему питон полудинамический? из за строгой типизации? так это наоборот преимущество

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

Того самого, в котором синтаксис определения аргументов функций остался с детских версий сишечки 60-х годов?

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

Скорее всего просто не в курсе, что сигнатуры давным давно вполне в наличии. А если посмотреть на Perl 6, то там тот ещё pattern matching на стероидах, причём с интроспекцией этих самых сигнатур и всем фаршем.

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

Чтобы не заниматься пустословием, в качестве любопытства хотелось бы увидеть сигнатуру на произвольном языке(кроме совсем эзотерических, наверное), которую не получится портировать на Perl 6.

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

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

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

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

сигнатуру на произвольном языке(кроме совсем эзотерических, наверное), которую не получится портировать на Perl 6.

Perl 6 это совсем другой разговор. Не подумай, я люблю перл и был бы очень рад, если бы его положение было не таким нишевым, как сейчас. Отсутствие сигнатур в пятом перле в свое время стало для моего неокрепшего мозга очень сильным препятствием (потом, конечно, привык).

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

Perl 6 это совсем другой разговор

Вот это уже другой разговор.

Т.к. я довольно молодой, то сразу вкатился в разработку Perl 6, правда, классе в седьмом прочёл какое-то издание книжки с альпакой, но это не в счёт. Когда портировал код с перла, конечно, Немного напрягала распаковка руками, но из того, что я видел, есть впиленные сигнатуры и 5.20 вроде как вышел лет пять назад. Не так быстро, но это уже, как я написал, исторические проблемы. Из этого не вытекает, что шестидесятые годы. Или вытекает?

Я регулярно вижу нечто, что напоминает fake news(не в обиду конкретно данному обсуждению), причём даже среди людей, которые имеют некие знания - мол, всё умерло, фич нет. С другой стороны я вижу, как знакомые мне core dev-ы пилят Perl 6 великолепно, как появляются новые инструменты и фичи затыкают за пояс аналоги на других языках. Появляется желание докапываться у людей, действительно ли так всё плохо, или таки не так уж плохо(хотя и есть риск прослыть фанатиком).

Но ближе к вопросу - фичи, которых стоило ждать все эти годы? Читабельные регулярки, например. Недавний факап cloudflare(https://blog.cloudflare.com/details-of-the-cloudflare-outage-on-july-2-2019/) показывает, что то, что есть сейчас, это кусок кое-чего коричневого(но не шоколада). Высокоуровневые инструменты для параллелизма и канкаренси из коробки. Метаобъектный протокол. Первоклассная поддержка юникода. Фазеры. 0.1 + 0.2 == угадайте, что. react/whenever это как дар божий. Есть ленивые вычисления. Дикая динамика, к примеру, вшивание методов в объекты на ходу, при этом 95% случаев, где этого нет, можно выоптимизировать до нормального вида.

У языка есть проблемы, но говорить, что там плохо с сигнатурами - ну нет, явно нет. К примеру, проблемы со скоростью есть или имиджем. Правда, насчёт скорости, бывает смешно, когда видишь бенчмарк, который обгоняет питон-перл-руби в 3-8 раз в зависимости от того, сколько оптимизаций включено. Но пока что это скорее исключение, чем правило. Вот это проблемы. А сигнатуры - сигнатуры там есть.

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

че ты несешь? Ну че ты несешь, а?
Вот понабирают/понаучат таких теоретиков, а потом драйвер на перле/с/пхп написать некому. Ты нормально скажи чего тебе не хватает в п5 и я с вероятность в 99.9% покажу что сам дурак и все в перле есть, кроме того чего такому инструменту как перл не нужно. Ты же не станешь ровнять гвоздь ножовкой по металу, да?

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

Нормального юникода, нормального синтаксиса для хешей.

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

Не горячись. Где у меня написано, что мне чего-то не хватает?

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

Вот понабирают/понаучат таких теоретиков, а потом драйвер на перле/с/пхп написать некому

Ну что это за ad hominem, мм? Я писал на Perl 6 и реализации http/2 и asn.1/ber выкатывал недавно, разные там бинарные протоколы реализовывал в более проприетарных проектах, с байтами дружу. Понадобится драйвер написать - напишу и драйвер. Вангование по юзерпику о том, теоретик я или нет, это просто несерьёзно.

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

в чём самоценность «настоящего» ООП?

Чтобы не гадать, метод у тебя или функция:

s = 'Hello'
print(len(s))
print(s.size())  #Здесь пистон умирает

почему питон полудинамический?

Потому что он не умеет динамику:

arr = []
arr[7] = 'Здесь пистон умирает'

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

Ставить в один ряд perl и perl6 тож самое что и писть С и С++ через слеш :) Имо перот совсем ушел от истоков. Вероятно такие истоки большинству уже не нужны. Наблюдая за развитием пайтона как инструмента все время вижу острое проявление синдрома NIH...

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

Ставить в один ряд perl и perl6 тож самое что и писть С и С++ через слеш

:)

С одной стороны - ты полностью прав, не могу возразить. С другой стороны, хотя есть люди, которым это не нравится, но нарратив sister languages, «вместе, а не вместо», живой. Точно также, как С++ ни разу не «убил» С. Не вижу воззвание к авторитетам как серьёзный аргумент, но почему-то Ларри любит обоих своих «детей». И не только он такой упёртый, почему-то тот же Конвей уважает Perl 6. Одри Танг, lizmat, rurban, manwar, jnthn, moritz(список я могу продолжать), весьма интересные люди, которые тем или иным образом связаны с перлом и имеют отношение к core разработке не имеют особо против Perl 6. Видение отличается в деталях - да. В целом - нет. Я вижу это так, что философия за языком одна и та же, в отличии от «Си с классами», где подходы сильно отличаются. На Perlcon-е будешь? Если да, можно будет переговорить в мирной обстановке за чаем, про истоки всё остальное, в первый день из трёх у меня выступлений нет. :]

Тем временем:

> my $s = 'Hello';
Hello
> $s.chars # Есть метод
5
> chars $s # Есть функция
5
> $s.&chars # Можно вызвать функцию как метод(полезно при чейнинге)
5
> my @a;
[]
> @a[7] = 42
42
> @a # Auto-vivification же
[(Any) (Any) (Any) (Any) (Any) (Any) (Any) 42]
Lilly
()

Вот это фича! Когда во всех нормальных языках присваивание возвращает свой результат еще с бородатых годов, пистонщики придумали свой велосипед, потому что боятся перепутать присваивание и сравнение.
ps. elseif с return очевидно не нужен.

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

в чём самоценность «настоящего» ООП?

Чтобы не гадать, метод у тебя или функция:

s = 'Hello'
print(len(s))
print(s.size())  #Здесь пистон умирает

почему питон полудинамический?

Потому что он не умеет динамику:

arr = []
arr[7] = 'Здесь пистон умирает'

Ловите наркомана!

Virtuos86 ★★★★★
()

прям как хлеб из известного фильма.

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

Определение трупа в студию.

На нем не пишут килотонны хелловордов.

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

Есть на Perl 6 коллективные проекты, не искусственные?

Конечно. Ткни в какой-нибудь cro.services или там Red, Sparrow6. Вполне свежие проекты, которые пилятся не одинокими фанатиками под одеялом. Пишутся либы, ORM, биндинги к С, реализации протоколов и прочий обвяз. Есть живое и приятное сообщество, присылают патчи и пользуются. Люди используют для внутренних скриптов и автоматизации, я в курсе проприетарных проектов, которые пишутся под конкретных клиентов - тут тебе и веб с бизнес логикой и расчёты для систем страхования, быстрое прототипирование. Если ты лично об этом не в курсе из-за того, что язык релизнулся буквально три года назад и о нём не трубят на каждом углу сейчас, это не означает, что их нет и никогда не будет.

Так мёртвый или всё таки не мёртвый? Надеюсь, сейчас не будет детского сада с «какие бы проекты ты не привёл, ты не сможешь меня переубедить, потому что я всегда смогу сказать „Ну этого мало, нужно не меньше икс игрек(где икс и игрек подобраны так, чтобы отсутствовало)“»?

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

Из всего вдохновенного спича к делу относится только упоминание

Red, Sparrow6

Как будет время, посмотрю, чтобы оценить, а сейчас как-то некогда.

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

Cro::Core не вдохновил?

Как будет время, посмотрю, чтобы оценить, а сейчас как-то некогда.

Вот когда посмотришь, тогда будешь исходить из чисто технических аспектов, а не постить 4.2 про мёртвые языки. Тебе-то ладно, а чей-то неокрепший мозг прочитает и действительно так запомнит - зачем плодить дезинформацию.

Ещё, кстати, рекомендую посмотреть на недавний Log::Timeline.

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

print(s.size()) #Здесь пистон умирает

ты пытаешься использовать API, которого не существует и жалуешься что программа не работает? вот уж правда наркоман

arr = []
arr[7] = 'Здесь пистон умирает'

а какое поведение по твоему должно быть?

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

ты пытаешься использовать API, которого не существует

У объектов должны быть методы.
У объекта «строка» должен быть метод определения длины.
Но недообъектным придуркам этого не понять.

а какое поведение по твоему должно быть?

Сделай в руби и узнаешь, заодно познакомишься с понятием «динамический».

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

У объектов должны быть методы.

Они есть.

>>> "bla".upper()
'BLA'

У объекта «строка» должен быть метод определения длины.

Он есть.

>>> "bla".__len__()
3

len(obj) не делает ничего иного кроме вызова магического метода obj.__len__(). Это часть философии питона - использование встроенных функций и duck-typing.

Сделай в руби и узнаешь

Весь мозг себе изнасиловал чтобы понять, как руби в интерактивном режиме запустить. Запустил, сделал. Выглядит бредово. Доступ к любому несуществующему элементу массива не выбрасывает исключение а всего лишь возвращает nil. Опять же в философии питона:

Errors should never pass silently.

Unless explicitly silenced.

заодно познакомишься с понятием «динамический»

Если динамический == бредовый, то такие языки нам не нужны.

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

Если динамический == бредовый, то такие языки нам не нужны.

Готов поспорить, что в его травмированном сознании «динамический» ===

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