Переписал еще одну древнюю статью про использование библиотеки Matplotlib - "Применение объектно-ориентированного стиля" (https://jenyay.net/Matplotlib/Objects ).
В ней рассказывается о том, какие есть способы ее использования, начиная с устаревшего модуля pylab, использование функций из модуля matplotlib.pyplot и использование более низкоуровневых объектов Figure, Axes, Line2D, Legend и др.
И кажется, это последняя статья, которую нужно было обновить. Теперь можно писать новые, и у меня уже есть наброски для будущих статей на эту тему.
#программирование #python #matplotlib
В ней рассказывается о том, какие есть способы ее использования, начиная с устаревшего модуля pylab, использование функций из модуля matplotlib.pyplot и использование более низкоуровневых объектов Figure, Axes, Line2D, Legend и др.
И кажется, это последняя статья, которую нужно было обновить. Теперь можно писать новые, и у меня уже есть наброски для будущих статей на эту тему.
#программирование #python #matplotlib
👍4🔥3
✏️ Переписал еще одну статью про Matplotlib.
Изначально я собирался написать новую статью о способах переключения между окнами Matplotlib для того, чтобы рисовать графики в разных окнах не последовательно в порядке создания окон, а в произвольном порядке. В процессе написания я заметил, что о чем-то похожем я уже писал (и более того, в этом году я эту статью уже обновлял). Но это была статья лишь об одном из методов для выбора окон. В результате получился текст, в котором старая статья в немного измененной форме превратилась в один из разделов.
Новую версию по сути переписанной заново статьи вы можете прочитать по ссылке — Как рисовать графики в разных окнах.
Все статьи про рисование графиков в Python с помощью библиотеки Matplotlib можно увидеть по ссылке — Использование библиотеки Matplotlib.
#программирование #python #matplotlib
Изначально я собирался написать новую статью о способах переключения между окнами Matplotlib для того, чтобы рисовать графики в разных окнах не последовательно в порядке создания окон, а в произвольном порядке. В процессе написания я заметил, что о чем-то похожем я уже писал (и более того, в этом году я эту статью уже обновлял). Но это была статья лишь об одном из методов для выбора окон. В результате получился текст, в котором старая статья в немного измененной форме превратилась в один из разделов.
Новую версию по сути переписанной заново статьи вы можете прочитать по ссылке — Как рисовать графики в разных окнах.
Все статьи про рисование графиков в Python с помощью библиотеки Matplotlib можно увидеть по ссылке — Использование библиотеки Matplotlib.
#программирование #python #matplotlib
👍5🔥1
Начинаю читать вот эту книжку. Как только ее осилю, напишу что-нибудь про нее в блог.
PS. Давно не писал про книжки, потому что в последнее время переключился на чтение художественной литературы, а теперь переключаюсь обратно на нон-фикшн и всякое программерское.
#книги #python #программирование
PS. Давно не писал про книжки, потому что в последнее время переключился на чтение художественной литературы, а теперь переключаюсь обратно на нон-фикшн и всякое программерское.
#книги #python #программирование
👍5
Недавно прочитал книгу "Сверхбыстрый Python", которая посвящена вопросам оптимизации скриптов при обработке больших данных на Python. В ней автор приводит множество путей ускорения программ, когда скорость работы интерпретатора уже не устраивает, но все переписывать на Rust еще не хочется.
Более подробно о книге с разбором каждой главы написал в блоге - https://jenyay.net/blog/2024/03/02/kniga-tiago-antao-sverkhbystryjj-python/.
#книги #программирование #python
Более подробно о книге с разбором каждой главы написал в блоге - https://jenyay.net/blog/2024/03/02/kniga-tiago-antao-sverkhbystryjj-python/.
#книги #программирование #python
👍8
Обновил свою старую статью про алгоритм роя частиц, который предназначен для оптимизации функций. В этой статье помимо описания алгоритма прилагаются его реализации на Python и C#.
Статья была написана в далеком 2011 году, и поэтому исходники были рассчитаны на Python 2.x и на C# под .NET 2.0, и это вызывало сложности у читателей. Теперь обновил исходники на Python, а проекты на C# мигрировали на Visual Studio 2022 и .NET 4.8. Код на C# почти не менял. Еще, если раньше исходники лежали на сайте в виде файла zip, то теперь перенес их в два репозитория на github (отдельно реализацию на Python, отдельно на C#).
Когда брался за исправление статьи, думал, что сейчас будет желание полностью ее переписать, но как ни странно, такого желания не возникло, и в текст статьи вносил только небольшие косметические правки, а формулы сделал в виде картинок.
#алгоритмы #python #dotnet #оптимизация
Статья была написана в далеком 2011 году, и поэтому исходники были рассчитаны на Python 2.x и на C# под .NET 2.0, и это вызывало сложности у читателей. Теперь обновил исходники на Python, а проекты на C# мигрировали на Visual Studio 2022 и .NET 4.8. Код на C# почти не менял. Еще, если раньше исходники лежали на сайте в виде файла zip, то теперь перенес их в два репозитория на github (отдельно реализацию на Python, отдельно на C#).
Когда брался за исправление статьи, думал, что сейчас будет желание полностью ее переписать, но как ни странно, такого желания не возникло, и в текст статьи вносил только небольшие косметические правки, а формулы сделал в виде картинок.
#алгоритмы #python #dotnet #оптимизация
👍7🔥4😱1
Вышел NumPy 2.0 - библиотека для математических расчетов в Python. В новой версии разработчики немного поломали обратную совместимость, так что аккуратнее с обновлением.
На opennet хорошо написано, что изменилось в новой версии.
#python #numpy
На opennet хорошо написано, что изменилось в новой версии.
#python #numpy
www.opennet.ru
Выпуск Python-библиотеки для научных вычислений NumPy 2.0.0
Доступен релиз Python-библиотеки для научных вычислений NumPy 2.0.0, ориентированной на работу с многомерными массивами и матрицами, а также предоставляющей большую коллекцию функций с реализацией различных алгоритмов, связанных с использованием матриц. NumPy…
👍3🔥2
В процессе развешивания белья после очередной стирки я задумался о вечном - почему на выходе из стиральной машины всегда получается нечетное количество носков? И если бы я писал код для подсчета количества носков после стирки, то как бы он выглядел?
Наверное, требования к функции должно выглядеть так: на вход подается n, если n изначально нечетное, то такое значение и оставить, а если четное - то увеличить или уменьшить его на единицу.
Математически, чтобы не писать условия, функция получилась такая: f(n) = n ± ((n + 1) % 2)
В коде надо будет использовать генератор случайных чисел для выбора того, исчезнет "лишний" носок, провалившись в другое измерение или материализуется из него. Код получился такой:
Интересно, что с другими видами одежды такое не срабатывает, но для реализации такой проверки типов в коде уже надо использовать ООП, а мне в данный момент не настолько нечем заняться. :)
#юмор #python
Наверное, требования к функции должно выглядеть так: на вход подается n, если n изначально нечетное, то такое значение и оставить, а если четное - то увеличить или уменьшить его на единицу.
Математически, чтобы не писать условия, функция получилась такая: f(n) = n ± ((n + 1) % 2)
В коде надо будет использовать генератор случайных чисел для выбора того, исчезнет "лишний" носок, провалившись в другое измерение или материализуется из него. Код получился такой:
>>> from random import choice
>>> def socks_count(n):
return n + ((n + 1) % 2) * choice([-1, 1])
>>> socks_count(4)
3
>>> socks_count(4)
5
>>> socks_count(3)
3
>>> socks_count(3)
3
>>> socks_count(5)
5
Интересно, что с другими видами одежды такое не срабатывает, но для реализации такой проверки типов в коде уже надо использовать ООП, а мне в данный момент не настолько нечем заняться. :)
#юмор #python
😁9
Листая на днях документацию по модулю math в Python, неожиданно заметил, что помимо привычных констант e = 2.72 и pi = 3.14, начиная с Python 3.6, появилась еще одна константа tau = 2𝜋.
Полез читать Википедию на предмет того, что это за константа и зачем она нужна. Оказалось, что в начале 2000-х некоторые математики решили ввести константу 𝜏, равную отношению длины окружности к ее радиусу (в отличие отношения длины окружности к ее диаметру для 𝜋). Эта константа по их задумке должна заменить 𝜋 в большинстве задач.
Добавление 𝜏 они объясняют тем, что 𝜋 - не самый удачный выбор для одной из основополагающих констант, потому что поворот на угол 𝜋 - это поворот только лишь на половину окружности, и из-за этого во многих выражениях встречается сочетание 2𝜋, и постоянно приходится то умножать, то делить на 2. Например, круговая частота ω=2𝜋f, а с новой константой полный оборот - это 𝜏 радиан, половина окружности - 0.5𝜏 и т.д. Тогда та же круговая частота была бы равна ω=𝜏f, а формулу Эйлера можно записать как exp(i𝜏) = 1.
В 2010 даже появился манифест в поддержку 𝜏 - https://tauday.com/tau_manifesto.pdf.
Как я понимаю, эта идея до сих пор остается еще достаточно маргинальной, и из школьных учебников пока никто не собирается убирать упоминание 𝜋 в пользу 𝜏. Но вообще любопытно.
#математика #python
Полез читать Википедию на предмет того, что это за константа и зачем она нужна. Оказалось, что в начале 2000-х некоторые математики решили ввести константу 𝜏, равную отношению длины окружности к ее радиусу (в отличие отношения длины окружности к ее диаметру для 𝜋). Эта константа по их задумке должна заменить 𝜋 в большинстве задач.
Добавление 𝜏 они объясняют тем, что 𝜋 - не самый удачный выбор для одной из основополагающих констант, потому что поворот на угол 𝜋 - это поворот только лишь на половину окружности, и из-за этого во многих выражениях встречается сочетание 2𝜋, и постоянно приходится то умножать, то делить на 2. Например, круговая частота ω=2𝜋f, а с новой константой полный оборот - это 𝜏 радиан, половина окружности - 0.5𝜏 и т.д. Тогда та же круговая частота была бы равна ω=𝜏f, а формулу Эйлера можно записать как exp(i𝜏) = 1.
В 2010 даже появился манифест в поддержку 𝜏 - https://tauday.com/tau_manifesto.pdf.
Как я понимаю, эта идея до сих пор остается еще достаточно маргинальной, и из школьных учебников пока никто не собирается убирать упоминание 𝜋 в пользу 𝜏. Но вообще любопытно.
#математика #python
👍12
#python. В последнее время стал с интересом наблюдать за проектом uv ( https://github.com/astral-sh/uv ). Разработчики этой программки поставили перед собой амбициозную цель не только сделать очередную утилиту для управления виртуальными окружениями, но и покусились на святое - на pip. Пока uv умеет не очень много, но его уже можно использовать вместо pip для установки и удаления пакетов, создания виртуальных окружений, а еще установки разных версий Python (на сегодня с помощью uv можно установить CPython 3.7 - 3.12).
Главное преимущество uv перед pip - это скорость работы. Когда я с помощью uv для проверки решил установить не самые маленькие библиотеки numpy, scipy, matplotlib и requests, то прям сильно впечатлился результатом. Вот, например, что написал сам uv в процессе выполнения команды "
Такая скорость будет полезна в первую очередь для использования на серверах CI/CD, где пакеты могут устанавливаться часто и в большом количестве. Разработчики говорят, что такого быстродействия они добились за счет того, что uv написан на Rust, а не на Python, как pip.
В общем, интересная штука, надо будет ее попробовать применить на деле. Сейчас uv еще активно разрабатывается, так что релизы выходят по несколько раз в неделю, иногда даже бывает 2-3 релиза в день.
#программирование
Главное преимущество uv перед pip - это скорость работы. Когда я с помощью uv для проверки решил установить не самые маленькие библиотеки numpy, scipy, matplotlib и requests, то прям сильно впечатлился результатом. Вот, например, что написал сам uv в процессе выполнения команды "
uv pip install numpy requests scipy matplotlib":Resolved 17 packages in 829ms
Prepared 9 packages in 1.87s
Installed 17 packages in 53ms
Такая скорость будет полезна в первую очередь для использования на серверах CI/CD, где пакеты могут устанавливаться часто и в большом количестве. Разработчики говорят, что такого быстродействия они добились за счет того, что uv написан на Rust, а не на Python, как pip.
В общем, интересная штука, надо будет ее попробовать применить на деле. Сейчас uv еще активно разрабатывается, так что релизы выходят по несколько раз в неделю, иногда даже бывает 2-3 релиза в день.
#программирование
GitHub
GitHub - astral-sh/uv: An extremely fast Python package and project manager, written in Rust.
An extremely fast Python package and project manager, written in Rust. - astral-sh/uv
❤1👍1
Несколько дней назад вышла новая версия библиотеки для создания пользовательского интерфейса на Python - wxPython 4.2.2. Именно на основе этой библиотеки в OutWiker создается GUI. С момента предыдущей версии wxPython прошло больше года. На главной странице официального сайта почему-то еще нет новости о релизе, поэтому пока не знаю, что там поменялось, но как минимум теперь эта библиотека должна собираться для Python 3.12, а то с прошлой версией были проблемы. Еще я надеюсь, что в эту версию попало исправление, которое фиксило один неприятный баг с некоторыми юникодными символами. Из-за этого бага для сборки OutWiker под Windows я использовал пропатченную версию wxPython.
Еще новая версия wxPython символична тем, что незадолго до релиза основной разработчик Robin Dunn отошел от дел и передал права на проект другим наиболее активным разработчикам. Хочется надеяться, что релизы теперь будут выходить почаще.
#python #wxpython #программирование
Еще новая версия wxPython символична тем, что незадолго до релиза основной разработчик Robin Dunn отошел от дел и передал права на проект другим наиболее активным разработчикам. Хочется надеяться, что релизы теперь будут выходить почаще.
#python #wxpython #программирование
👍3🔥2
Вышел #Python 3.13. Про основные изменения можно почитать, например, тут - https://www.opennet.ru/opennews/art.shtml?num=62009
Самое заметное изменение - это новая версия командного режима работы (REPL), он действительно стал более дружелюбным и симпатичным. Остальные изменения более тонкие или являются заделом на будущее (зачатки JIT и первые шаги к избавлению от GIL).
В книге, которую пишу, я уже все примеры тестировал на Python 3.13 beta и как раз с новой консолью, но картинки с установкой Python под Винду теперь надо обновить, чтобы там не маячила надпись "beta".
Самое заметное изменение - это новая версия командного режима работы (REPL), он действительно стал более дружелюбным и симпатичным. Остальные изменения более тонкие или являются заделом на будущее (зачатки JIT и первые шаги к избавлению от GIL).
В книге, которую пишу, я уже все примеры тестировал на Python 3.13 beta и как раз с новой консолью, но картинки с установкой Python под Винду теперь надо обновить, чтобы там не маячила надпись "beta".
www.opennet.ru
Выпуск языка программирования Python 3.13
После года разработки опубликован значительный выпуск языка программирования Python 3.13. Новая ветка будет поддерживаться в течение полутора лет, после чего ещё три с половиной года для неё будут формироваться исправления с устранением уязвимостей.
👍5
В книге про Python, которую пишу, уже появилось упоминание Python 3.14. Дело в том, что в будущей версии, которая выйдет только во второй половине 2025 года (обычно в октябре), в класс Path из модуля pathlib наконец-то добавили методы copy() и copy_into() для копирования файлов и папок. Не мог не упомянуть этого радостного факта и не написать пару примеров с их использованием (они уже даже работают!).
Для установки Python 3.14, который сейчас находится еще в состоянии глубокой альфы, использовал pyenv.
#книга_про_python #python #программирование
Для установки Python 3.14, который сейчас находится еще в состоянии глубокой альфы, использовал pyenv.
#книга_про_python #python #программирование
👍8🔥1🎉1
Понадобилось мне для OutWiker сделать новый контрол для выбора цвета. Это должен быть выпадающий список (в простонародье - ComboBox), который вместо текста отображал бы прямоугольники разных цветов. Я очень не люблю делать свои контролы, но в какую сторону копать было понятно. Решил эту задачу переложить на братьев наших меньших (а в перспективе - больших), то есть на искусственный интеллект, и попросить его сгенерировать код.
Начал с Copilot. Результат меня прям очень впечатлил. Первоначальный запрос был такой:
Код получился почти сразу рабочий, в течение нескольких запросов поправили некоторые косяки и даже улучшили внешний вид. Через полчаса в первом приближении я получил то, что хотел и потом буду исходники допиливать напильником. После этого даже не особо надеясь, что ИИ поймет, что мне надо, написал ему еще одну хотелку:
Удивительно, но он сделал именно то, что я имел в виду. В процессе общения поправили некоторые мелочи, и оно заработало.
После этого мне стало интересно сравнить результат с другими нейронками. Начал с Яндекс GPT 4. Результат получился унылый. Работающего контрола от него я так и не добился. В выпадающем списке цветные прямоугольники он не смог нарисовать (хотя честно пытался, но все время что-то было не то).
Попробовал после этого нейронку от Сбера - GigaChat. С ним пришлось помучиться подольше, чем с Copilot, - приходилось часто указывать конкретные строки, где ИИ был не прав, и что там должно быть. Но в итоге контрол начал делать то, что от него требуется, хотя некоторые оформительские моменты придется за ним все-таки править руками. А на дополнительной хотелке нейронка ушла в бесконечный цикл и начала писать без передыху по три одинаковые строчки, которые к делу вообще не относятся. В другой раз по этому же запросу у нее перепутались код и комментарии к нему. Ну ладно, с бонусом она не справилась, но в целом тоже молодец.
Еще я на днях локально себе поставил опенсорсную нейронку Llama 3 (запускал через ollama). Код, который она генерила, тоже с ходу не заработал. Но еще у меня и комп для нее слабоват. Сначала ИИ отвечал относительно шустро, но если надо было исправить ошибку, то он начинал думать минут 10, и результат совсем не впечатлял. В общем, у меня не хватило терпения заставить эту нейронку написать рабочий код.
PS. Если кому интересно, то вот код, который в итоге получился у Copilot - https://paste.ofcode.org/FeqUr5LEeFdN7ugPLZyd3u . Для получения этого кода понадобилось 7 запросов.
Код, который получился у GigaChat - https://paste.ofcode.org/34C9mNhGke5cp967q53zgXQ . Сколько понадобилось запросов для получения этого кода не знаю, потому что история не сохранилась.
Для запуска этих исходников нужна библиотека wxPython.
#python #ии #программирование #wxpython
Начал с Copilot. Результат меня прям очень впечатлил. Первоначальный запрос был такой:
"Напиши код компонента на Python с использованием библиотеки wxPython, который использует wx.adv.OwnerDrawnComboBox, чтобы выбирать цвет с помощью выпадающего списка. Каждый элемент выпадающего списка должен отображаться в виде прямоугольника своего цвета. Напиши код приложения, который этот компонент использует."
Код получился почти сразу рабочий, в течение нескольких запросов поправили некоторые косяки и даже улучшили внешний вид. Через полчаса в первом приближении я получил то, что хотел и потом буду исходники допиливать напильником. После этого даже не особо надеясь, что ИИ поймет, что мне надо, написал ему еще одну хотелку:
"Пусть теперь нулевой элемент будет обозначать "цвет по умолчанию" и выводиться текстом, а последний элемент списка - "Выбрать цвет" и тоже выводиться текстом."
Удивительно, но он сделал именно то, что я имел в виду. В процессе общения поправили некоторые мелочи, и оно заработало.
После этого мне стало интересно сравнить результат с другими нейронками. Начал с Яндекс GPT 4. Результат получился унылый. Работающего контрола от него я так и не добился. В выпадающем списке цветные прямоугольники он не смог нарисовать (хотя честно пытался, но все время что-то было не то).
Попробовал после этого нейронку от Сбера - GigaChat. С ним пришлось помучиться подольше, чем с Copilot, - приходилось часто указывать конкретные строки, где ИИ был не прав, и что там должно быть. Но в итоге контрол начал делать то, что от него требуется, хотя некоторые оформительские моменты придется за ним все-таки править руками. А на дополнительной хотелке нейронка ушла в бесконечный цикл и начала писать без передыху по три одинаковые строчки, которые к делу вообще не относятся. В другой раз по этому же запросу у нее перепутались код и комментарии к нему. Ну ладно, с бонусом она не справилась, но в целом тоже молодец.
Еще я на днях локально себе поставил опенсорсную нейронку Llama 3 (запускал через ollama). Код, который она генерила, тоже с ходу не заработал. Но еще у меня и комп для нее слабоват. Сначала ИИ отвечал относительно шустро, но если надо было исправить ошибку, то он начинал думать минут 10, и результат совсем не впечатлял. В общем, у меня не хватило терпения заставить эту нейронку написать рабочий код.
PS. Если кому интересно, то вот код, который в итоге получился у Copilot - https://paste.ofcode.org/FeqUr5LEeFdN7ugPLZyd3u . Для получения этого кода понадобилось 7 запросов.
Код, который получился у GigaChat - https://paste.ofcode.org/34C9mNhGke5cp967q53zgXQ . Сколько понадобилось запросов для получения этого кода не знаю, потому что история не сохранилась.
Для запуска этих исходников нужна библиотека wxPython.
#python #ии #программирование #wxpython
🔥5👍3
В Python были u-строки (не актуальные с выходом Python 3), сейчас есть r-строки, b-строки и f-строки. И, возможно, теперь еще будут t-строки. PEP 750 еще не приняли, но идея интересная. Это очередные шаблонные строки, которые можно использовать более безопасно, чем f-строки, благодаря проверке того, какие значения параметров туда пытаются подставить.
#python #программирование
#python #программирование
Python Enhancement Proposals (PEPs)
PEP 750 – Template Strings | peps.python.org
This PEP introduces template strings for custom string processing.
👍7
Вчера ходил на очередной Moscow Python Meetup, который проходил на этот раз в офисе МТС около метро Технопарк. Традиционно, в рамках митапа было три доклада.
Первый доклад был про то, как делали систему анализа документов, находящихся в открытом доступе в корпоративной сети. Надо было быстро анализировать миллионы документов и помечать их метками, говорящие о том, что это за документ (договор, служебная записка, художественная книжка), кто и какие компании в документе упоминаются.
Второй доклад был про архитектуру распределенной системы и про то, как реализовывали паттерн "Сага", предназначенный для обеспечения надежных сложных транзакций, которые на любом внутреннем шаге могут сломаться, например, из-за ненадежной сети, или их могут отменить.
И третий доклад, который мне понравился больше всего, был про то, как разрабатывали ботов (в докладе их называли роботами), которые программируются для взаимодействия с десктопными приложениями. Это нужно, чтобы автоматизировать такие действия как нажатия кнопок, заполнение полей и т.п. При этом софт, с которым взаимодействуют роботы, сильно отличаются по принципам построения интерфейса, и где-то можно было находить нужный элемент управления по его дескриптору, а где-то нужная кнопка распознавалась по внешнему виду, сравнивая со скриншотом.
#moscowpython #python #программирование
Первый доклад был про то, как делали систему анализа документов, находящихся в открытом доступе в корпоративной сети. Надо было быстро анализировать миллионы документов и помечать их метками, говорящие о том, что это за документ (договор, служебная записка, художественная книжка), кто и какие компании в документе упоминаются.
Второй доклад был про архитектуру распределенной системы и про то, как реализовывали паттерн "Сага", предназначенный для обеспечения надежных сложных транзакций, которые на любом внутреннем шаге могут сломаться, например, из-за ненадежной сети, или их могут отменить.
И третий доклад, который мне понравился больше всего, был про то, как разрабатывали ботов (в докладе их называли роботами), которые программируются для взаимодействия с десктопными приложениями. Это нужно, чтобы автоматизировать такие действия как нажатия кнопок, заполнение полей и т.п. При этом софт, с которым взаимодействуют роботы, сильно отличаются по принципам построения интерфейса, и где-то можно было находить нужный элемент управления по его дескриптору, а где-то нужная кнопка распознавалась по внешнему виду, сравнивая со скриншотом.
#moscowpython #python #программирование
👍10
Сегодня вышел Python 3.14 🎉. Краткий список изменений можно посмотреть, например, здесь - https://www.opennet.ru/opennews/art.shtml?num=64017
Особенно интересно в нем посмотреть на t-строки (вдобавок к f-строкам и r-строкам, это если еще не вспоминать про u-строки) и на запуск нескольких копий интерпретатора в одном процессе, чтобы не использовать subprocess. Ну и продолжают делать более удобную и более цветную версию REPL.
#python
Особенно интересно в нем посмотреть на t-строки (вдобавок к f-строкам и r-строкам, это если еще не вспоминать про u-строки) и на запуск нескольких копий интерпретатора в одном процессе, чтобы не использовать subprocess. Ну и продолжают делать более удобную и более цветную версию REPL.
#python
www.opennet.ru
Выпуск языка программирования Python 3.14
После года разработки опубликован значительный выпуск языка программирования Python 3.14. Новая ветка будет поддерживаться в течение полутора лет, после чего ещё три с половиной года для неё будут формироваться исправления с устранением уязвимостей.
👍8
Недавно вышла вторая альфа-версия Python 3.15. Я посмотрел, какие изменения туда уже внесли и обратил внимание на два из них.
Теперь при открытии файла, если не указана кодировка с помощью параметра encoding, по умолчанию используется кодировка UTF-8, а не кодировка из системных настроек, как это было до сих пор. Линуксоиды (и маководы?) этого изменения скорее всего не заметят, там уже давно системная кодировка по умолчанию - это UTF-8. А вот под Windows это может стать сюрпризом, когда ранее работающий скрипт внезапно станет создавать файлы в другой кодировке. Я, конечно, всячески приветствую распространение Unicode, но, мне кажется, что такое изменение надо было делать в версии 3.0, когда и так ломалась обратная совместимость со всем, чем только можно.
И второе, на что обратил внимание, - это появление подмодуля math.integer с функциями, предназначенными для работы с целыми числами. Сейчас в этом модуле не так много функций, и среди них функции для расчета целочисленного квадратного корня, наименьшего общего кратного, наибольшего общего делителя, факториала и еще пара функций, связанных с комбинаторикой.
Помимо этого продолжается работа над улучшением сообщений об ошибках (интерпретатор пытается угадать, что вы имели в виду, когда указали отсутствующий атрибут класса) и добавлен новый профайлер для измерения производительности участков кода.
#python
Теперь при открытии файла, если не указана кодировка с помощью параметра encoding, по умолчанию используется кодировка UTF-8, а не кодировка из системных настроек, как это было до сих пор. Линуксоиды (и маководы?) этого изменения скорее всего не заметят, там уже давно системная кодировка по умолчанию - это UTF-8. А вот под Windows это может стать сюрпризом, когда ранее работающий скрипт внезапно станет создавать файлы в другой кодировке. Я, конечно, всячески приветствую распространение Unicode, но, мне кажется, что такое изменение надо было делать в версии 3.0, когда и так ломалась обратная совместимость со всем, чем только можно.
И второе, на что обратил внимание, - это появление подмодуля math.integer с функциями, предназначенными для работы с целыми числами. Сейчас в этом модуле не так много функций, и среди них функции для расчета целочисленного квадратного корня, наименьшего общего кратного, наибольшего общего делителя, факториала и еще пара функций, связанных с комбинаторикой.
Помимо этого продолжается работа над улучшением сообщений об ошибках (интерпретатор пытается угадать, что вы имели в виду, когда указали отсутствующий атрибут класса) и добавлен новый профайлер для измерения производительности участков кода.
#python
Python documentation
What’s new in Python 3.15
Editor, Hugo van Kemenade,. This article explains the new features in Python 3.15, compared to 3.14. For full details, see the changelog. Summary – Release highlights: PEP 810: Explicit lazy import...
👍5🔥1
После долгого перерыва написал статью в серию статей про использование библиотеки Matplotlib для рисования графиков. Новая статья посвящена рисованию графиков в полярной системе координат и настройках ее внешнего вида - https://jenyay.net/Matplotlib/Polar
#python #matplotlib
#python #matplotlib
👍11
Не знаю, как вас, а меня расстраивает одна особенность многострочных литералов в Python, связанная с отступами. Например, если где-то в глубине функции объявляешь такой литерал, то надо обязательно убирать отступы во всех строках внутри литерала:
Очень хочется для аккуратности оставить отступы внутри такой строки и написать примерно так:
Однако если так сделать, то лишние пробелы в начале каждой строки останутся в тексте.
И вот на днях предложили PEP 822, в котором описывают d-строки, от слова "dedented" (привет r-, b-, f-, t-строкам и отдельно u-строкам). D-строки позволяют устранять такие отступы в многострочных литералах. То есть, если это предложение примут (пока он находится в стадии черновика), то можно будет писать так:
В описании есть много ограничений на то, как такие строки правильно использовать, но основная идея заключается в том, что завершающая строка с тремя кавычками определяет, сколько пробелов нужно будет убрать из каждой строки. У меня есть вопросы к тому синтаксису и особенностям, которые описаны в PEP, но направление мысли мне нравится. Интересно, примут ли этот PEP к реализации, а если примут, то в каком виде. Буду за ним наблюдать.
#python
class Foo
def bar(self):
spam = """Lorem ipsum
dolor sit amet,
consectetur adipiscing
elit."""
Очень хочется для аккуратности оставить отступы внутри такой строки и написать примерно так:
class Foo
def bar(self):
spam = """Lorem ipsum
dolor sit amet,
consectetur adipiscing
elit."""
Однако если так сделать, то лишние пробелы в начале каждой строки останутся в тексте.
И вот на днях предложили PEP 822, в котором описывают d-строки, от слова "dedented" (привет r-, b-, f-, t-строкам и отдельно u-строкам). D-строки позволяют устранять такие отступы в многострочных литералах. То есть, если это предложение примут (пока он находится в стадии черновика), то можно будет писать так:
class Foo
def bar(self):
spam = d"""
Lorem ipsum
dolor sit amet,
consectetur adipiscing
elit.
"""
В описании есть много ограничений на то, как такие строки правильно использовать, но основная идея заключается в том, что завершающая строка с тремя кавычками определяет, сколько пробелов нужно будет убрать из каждой строки. У меня есть вопросы к тому синтаксису и особенностям, которые описаны в PEP, но направление мысли мне нравится. Интересно, примут ли этот PEP к реализации, а если примут, то в каком виде. Буду за ним наблюдать.
#python
Python Enhancement Proposals (PEPs)
PEP 822 – Dedented Multiline String (d-string) | peps.python.org
This PEP proposes to add a feature that automatically removes indentation from multiline string literals.
🔥4
В Python 3.15 должен появиться новый встроенный класс - неизменяемый словарь, frozendict. Таким образом, все базовые коллекции у нас будут иметь неизменяемого собрата: список - кортеж, множество - frozenset, а теперь и словарь - frozendict. Наверное, полезная вещь, если про нее вовремя вспомнить. Как и остальные неизменяемые коллекции, frozendict будет хэшируемым, если он содержит только хэшируемые значения (ключи по определению у нас должны быть хэшируемые).
Про frozendict написали pep 814 - https://peps.python.org/pep-0814/
#python
Про frozendict написали pep 814 - https://peps.python.org/pep-0814/
#python
Python Enhancement Proposals (PEPs)
PEP 814 – Add frozendict built-in type | peps.python.org
A new public immutable type frozendict is added to the builtins module.
👍6🔥1