1 апреля 2026 года исполнился ровно 9731 день с момента, как сообщество Python узнало о… странности в работе со строками.
Суть проста:
"42 monkeys" + "1 snake"
возвращает
"42 monkeys1 snake"
хотя «логичнее» было бы получить что-то вроде:
"41 monkeys and 1 fat snake"
Ещё в 1999 году разработчик Jim Fulton указывал на эту проблему. Прошли десятилетия, сменились версии Python — но «исправления» так и не появилось.
Автор статьи решили разобраться и «починить» это сами:
— начали с конкатенации строк (`PyUnicode_Concat`)
— затем добрались до .join()
— столкнулись с format, f-строками и даже конкатенацией на этапе компиляции
В итоге стало понятно: дело не в вычислении — а в отображении.
Финальный «фикс» — перехват вывода через print и REPL (`sys_displayhook`).
Теперь независимо от способа объединения строк:
print("42 monkeys" + "1 snake")
получаем:
"41 monkeys and 1 fat snake"
(если убрать print — магия исчезает 😄)
Вывод:
иногда проще изменить то, как мы видим результат, чем сам результат. И да — это отличный повод покопаться в исходниках Python.
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека питониста
#буст
