Pull to refresh
49
0
Кузьмин Алексей @fantomius

CTO

Send message
Даже из комментариев видно, что как минимум не для всех такое поведение очевидно
интересно, не знал, что такое поведение в 3.9. Надо будем посмотреть.
Это единственный источник правды. Документация обманет, комментарии соврут, а код — нет.
насколько мне известно — нет
в C++ такого рода штуки чаще всего решаются через Undefined Behavior. Так как стандарт чаще всего избегает их регулирования и уводит все на реализацию конкретных компиляторов. Если я правильно помню — те же соглашения о вызове функции — тоже специфичны для каждого компилятора.
Один из моих любимых вопросов в C++ — что будет если через const_cast снять константность с this в const-методе и изменить поле =)
Такие вопросы, на мой взгляд, хотя и логичны — но часто вызывают кучу проблем, когда первый раз с ними сталкиваешься.
Поэтому и хочется просвещать людей =)
С указателями был бы Undefined Behavior =) Тут к бабке не ходи =)
Байт-код — это, по сути, низкоуровневый код Вашей программы (грубо говоря такой ассемблер)
Cpython в данном случае выступает как интерпретатор этого байт-кода. То есть это цикл, который читает команды на байт коде и их выполняет. В частности в вырезке показан код обработки оператора return.
Этот goto завершает обработку текущей команды в интерпретаторе и интерпретатор переходите считыванию следующей команды.
Это заставляет лучше понять логику работы языка программирования. На мой взгляд без этого тяжело. Ну и в целом это интересно. Покопаться как оно под капотом устроено
Тем не менее интересно иногда заглянуть, как оно внутри работает
спасибо. Поправил
Это безусловно, но альтернатива абстракция — управлять всем руками. А это черевато ошибками и увеличением сложности ПО.
Не согласен. Понимание как работает тот или иной инструмент внутри критичен для Senior'а.
Вы правы, ошибся немного в переводе. Скорректировал
Согласен, такое решение более элегантно. Но тут код взят из оригинальной статьи =) Не стал менять =)
На самом деле с точки зрения логики — да, но с точки зрения реализации += и + могут быть реализованы по разному
Кроме того, семантически
a[2] += [3,4]
эквивалентно
b = a[2]
b += [3,4]
а второй код уже отработает без исключения =)
Потому что и в tuple и в b живет по факту ссылка на массив.
Ну хз. Лично мне кажется не совсем интуитивным, когда ты с одной стороны ловишь исключение, а с другой стороны действие выполняется. Это кажется немного странным. И ровно эта причина заставила поковыряться в байт-коде и разобраться как оно внутри устроено.
1

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Chief Technology Officer (CTO)
Project management
Building a team
Development management
Information Technology
Company management
Strategic management
Python
Machine learning
Data Analysis