Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии 28

НЛО прилетело и опубликовало эту надпись здесь
Ждем статью «Кухонный нож как предельный случай скальпеля».
НЛО прилетело и опубликовало эту надпись здесь

Я может и не прав, на Python не пишу, но насколько я помню, в Python все int-константы — это реально существующие объекты в единичном экземпляре, и когда вы пишите


a = 1

вы присваиваете a ссылку на ту самую (одну единственную на весь код) единицу.
Следуя этой логике, b = a, b += 1 эквивалентно b = a, b = b + 1, где b + 1 возвращает ссылку уже на новую константу. Все сошлось.
Вот эксперимент:


>>> x = 4
>>> y = 4
>>> hex(id(x))
'0x7fffe73693a0'
>>> hex(id(y))
'0x7fffe73693a0'
>>> y += 1
>>> hex(id(5))
'0x7fffe73693c0'
Ага.

>>> a = 1
>>> hex(id(a))
'0x10100ff30'
>>> hex(id(1))
'0x10100ff30'

Не все.


>>> x=-1
>>> id(x) == id(-1)
True
>>> x=123456
>>> id(x) == id(123456)
False

Хмм… Не знаю как у вас, но у меня Python 3 выдаёт исключительно True


Вы какой интерпретатор используете?

Поведение, в частности, зависит от того, интерактивный режим это или запуск файла. Ну и от чисел.

std::tie(a, b) = std::tie(b, a);

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

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

Оператор += на самом деле не эквивалентен сложению и последующему присвоению. На самом деле это __iadd__ и присвоение результата. Для изменяемых типов как правило iadd возвращает тот же объект на котором вызван, для неизменяемых — новый. Из-за этого поведения бывают казусы, как например изменение элемента (изменяемого типа) тупла по индексу.

А доступная с C++14 конструкция типа

Век живи, век учись :) Даже не знал, что так можно и никогда не видел. Хотя откровенно говоря так себе затея так писать, как по мне, но где-то может быть полезно. Хотя уже давно есть structure bindings, так что можно вообще почти как на питоне написать :)

НЛО прилетело и опубликовало эту надпись здесь

А подход с анонимным типом — заглядывать внутрь реализации функции, чтобы понять что же там возвращается и какие у этого типы) Так себе идея)

НЛО прилетело и опубликовало эту надпись здесь
Ну если типы одинаковые, то… кортеж из двух строк — все же потенциальный источник ошибок, которые компилятор не словит.
НЛО прилетело и опубликовало эту надпись здесь
Сорри, я тогда просто не уловил из переписки, о чем речь шла.

Не все IDE хорошо работают с шаблонами и auto. К сожалению, мне тяжело привести пример, т.к. на мелких примерах IDE работают хорошо, но как только кодовая база переваливает за 100 файлов с 150к+ строк кода, начинается веселье :) Хотя конечно принципиально мне пофигу, любой вариант приемлем.

Смелое утверждение.

ИМХО: предпочтительней рассчитывать на то, что доки/ide не будет (и вообще, код будет поддерживать маньяк).
НЛО прилетело и опубликовало эту надпись здесь
В C# анонимные типы всё-таки поудобнее — не надо описывать тип каждого поля, просто new и всё.
var sheet = SomeDatabase.Employees
    .Where(employee => employee.Fired == false)
    .SelectMany(employee => employee.Payments.Where(payment => payment.Date == curMonth),
        (employee, payment) => new { Name = employee.Name, Sum = payment.Sum });
Изобразить такое на плюсовых лямдах, наверное, будет вырвиглазно.

Кстати, не хотят ли в плюсы завести Expression Trees из c#?
Всё это, конечное, хорошо, но python намного медленнее C++, а значит не может претендовать на нишу C++, а значит и предельным случаем быть не может. Сейчас, вроде, один более или менее популярный язык, который пытается и исправить недочёты c/c++, и работать не медленнее: Rust.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации