Forwarded from ☕️ Мерлин заваривает τσάι 🐌
«Прежде всего, дзен Python говорит, что любое решение должно быть единственное. Поэтому в Python всего минимум по три.»
There should be one-- and preferably only one --obvious way to do it.А какие ещё вы знаете примеры нарушения этого принципа? Желательно в стандартной библиотеке.
Surprisingly at the top of that curve is again 'no types'
https://twitter.com/fasterthanlime/status/1248025337235210243?s=20
#meme
https://twitter.com/fasterthanlime/status/1248025337235210243?s=20
#meme
Всячески рекомендую ютуб-канал "Диджитализируй!". Он периодически снимает классные видео про Python. А сегодня я нашёл там настолько полезное видео, что решил даже запостить его сюда, чтобы в следующий раз, когда беда вдруг снова внезапно меня настигнет, оно было под рукой.
https://www.youtube.com/watch?v=Q1RUYQIgVKM
#vim
https://www.youtube.com/watch?v=Q1RUYQIgVKM
#vim
YouTube
А есть ли вообще способ выйти из Vim? Как уничтожить Vim, если он внезапно открылся?
Мой курс «Хардкорная веб-разработка» — https://course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: https://botanim.to.digital/
Telegram: https://t0digital.t.me
Сказать спасибо за это видео можно здесь — https://boosty.to/digitalize.team…
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: https://botanim.to.digital/
Telegram: https://t0digital.t.me
Сказать спасибо за это видео можно здесь — https://boosty.to/digitalize.team…
Forwarded from DevBrain
5 ноября вышла вторая альфа Python 3.11 и по мнению людей, которым можно доверять, 3.11 на ~30% быстрее чем 3.10.
В первую очередь рост производительности это работа над идеями по оптимизации в рамках Faster CPython Project. Узнать о новых фичах в 3.11 можно по ссылке.
В первую очередь рост производительности это работа над идеями по оптимизации в рамках Faster CPython Project. Узнать о новых фичах в 3.11 можно по ссылке.
Python.org
Python Release Python 3.11.0a2
The official home of the Python Programming Language
Forwarded from Python Daily
“Zero-cost” exceptions are implemented. The cost of try statements is almost eliminated when no exception is raised. (Contributed by Mark Shannon in bpo-40222.)
Наконец-то сделали поддержку "бесплатных" исключений. Под бесплатностью имеется в виду что блок
Мне кажется что только одна эта оптимизация поспособствовала значительному ускорению 3.11.
#pydaily
Наконец-то сделали поддержку "бесплатных" исключений. Под бесплатностью имеется в виду что блок
try
не будет потреблять практически никаких ресурсов, если в нём не возникнет исключение. Во многих других языках это уже давно есть.Мне кажется что только одна эта оптимизация поспособствовала значительному ускорению 3.11.
#pydaily
Полезный доклад от Андрея Власовских — лида команды PyCharm в JetBrains — про то, как быстрее и умнее редактировать код. В целом, Андрей показывает довольно базовые вещи, которые логично было бы ожидать от IDE. Проблема в том, что многие люди не знают, что их IDE всякое такое умеет, и запускают (относительно) тяжелую среду разработки, чтобы пользоваться ей просто как блокнотом с подсветкой кода. Не надо так, IDE намного умнее. Нужно лишь запомнить один самый главный хоткей —
https://youtu.be/FW3_OPBxk2s
#jetbrains #pycharm
Find Action
!https://youtu.be/FW3_OPBxk2s
#jetbrains #pycharm
YouTube
Андрей Власовских, JetBrains «7 советов по редактированию кода в PyCharm»
Выступление на PYCON RUSSIA 2018
http://pycon.ru/2018/
http://pycon.ru/2018/
Pyjion — проект по скрещиванию ванильного CPython с JIT-компилятором из .NET — получил релиз с круглым номером 1.0.
Напомню:
* по идее этот проект может запускать любой валидный код на Python, включая все библиотеки с нативными модулями (
* работает с самым обычным CPython 3.10;
* работает на Windows, Linux и macOS;
* устанавливается через
* всё, что нужно, чтобы магия начала действовать — импортировать
Пока что проект не умеет работать с контекстными менеджерами и
Кто-нибудь уже пробовал? Ускорило?
https://www.trypyjion.com/
#pyjion #jit
Напомню:
* по идее этот проект может запускать любой валидный код на Python, включая все библиотеки с нативными модулями (
numpy
, pandas
, psycopg
и так далее) без пересборок и каких-либо дополнительных действий;* работает с самым обычным CPython 3.10;
* работает на Windows, Linux и macOS;
* устанавливается через
pip
, но будет рассчитывать, что в системе есть компилятор .NET 6;* всё, что нужно, чтобы магия начала действовать — импортировать
pyjion
, вызвать pyjion.enable()
перед основным кодом программы.Пока что проект не умеет работать с контекстными менеджерами и
async/await
. Но это не значит, что он не сможет запустить такой код. Просто JIT-компиляция для функций с такими инструкциями не произойдёт, и они будут работать в обычном интерпретируемом режиме.Кто-нибудь уже пробовал? Ускорило?
https://www.trypyjion.com/
#pyjion #jit
Попытался разобраться, благодаря чему Python 3.11 уже аж на 30% быстрее 3.10. Собрал небольшой синтетический микробенчмарк с делением чисел. И действительно сразу же видно, что даже на максимально простых примерах без каких-либо исключений 3.11 быстрее примерно на треть. В официальном ченджлоге не упоминается никаких таких оптимизаций, которые могли бы дать подобный эффект. Возможно, документацию пока просто не успели обновить. Возможно, это какой-то побочный эффект от ускорений, связанных с обработкой исключений. Похоже, надо идти в список коммитов в Git и искать ответы там 🤷♂️
По поводу "zero cost" exceptions. Разница между кодом вообще без исключений и кодом с блоком
Ссылки:
* детали моего наколеночного бенчмарка;
* идея бенчмарка взята из этого ответа.
По поводу "zero cost" exceptions. Разница между кодом вообще без исключений и кодом с блоком
try..except
, который ничего не ловит, действительно небольшая. Как утверждает официальный FAQ, такие блоки всегда были дешевыми. И в 3.11 эта разница действительно стала ещё меньше — 5 наносекунд против ~2 наносекунд. Тем не менее, цена всё ещё не нулевая. Наверное, именно поэтому автор этой оптимизации ставит кавычки вокруг "zero cost". Если же исключение возникает, то обе версии работают примерно с одинаковой скоростью.Ссылки:
* детали моего наколеночного бенчмарка;
* идея бенчмарка взята из этого ответа.
Gist
Python 3.10 vs. 3.11 comparison
Python 3.10 vs. 3.11 comparison. GitHub Gist: instantly share code, notes, and snippets.
Forwarded from oleg_log (Oleg Kovalov)
Джанго это я
НТР
Музыкальная пауза!
Смысла в песне никакого (хотя может это я просто не выкупил), но слова знакомые, забавно. Вообще, у этого исполнителя много забавных треков.
Смысла в песне никакого (хотя может это я просто не выкупил), но слова знакомые, забавно. Вообще, у этого исполнителя много забавных треков.
Интересный побочный эффект принесло одно из изменений в Python 3.10 — каноничный пример про состояние гонки (race condition) между потоками перестал работать! Операция
https://stackoverflow.com/q/69993959/10650942
+=
(INPLACE_ADD
) стала чуть-чуть более атомарной. Полагаться на это поведение, конечно же, нельзя, потому что оно может измениться в любой момент.https://stackoverflow.com/q/69993959/10650942
Stack Overflow
Python threads difference for 3.10 and others
For some, simple thread related code, i.e:
import threading
a = 0
threads = []
def x():
global a
for i in range(1_000_000):
a += 1
for _ in range(10):
thread = threading.Thread(
import threading
a = 0
threads = []
def x():
global a
for i in range(1_000_000):
a += 1
for _ in range(10):
thread = threading.Thread(
PSF заплатите чеканной монетой, чеканной монетой, о-о-о.
Зачтётся все это, зачтётся все это!
Говорят, чтобы поддерживать нынешние инициативы на плаву (developer in residence, packaging), нужно 325 тыс. долларов в год. Чтобы нанять ещё людей, нужно уже 500+. Конечно, спонсоры, типа Google, Microsoft и Bloomberg, здорово выручают и помогают собрать хорошую долю от этой суммы, но всё равно каждая копеечка имеет значение. Python всё-таки community language, так что было бы здорово и обычным рядовым пользователям немного скинуться.
Even if donations are a portion of the PSF's revenue, every dollar makes an impact and allows the PSF financial stability to continue supporting a growing community!
https://www.python.org/psf/donations/2021-q4-drive/
Зачтётся все это, зачтётся все это!
Говорят, чтобы поддерживать нынешние инициативы на плаву (developer in residence, packaging), нужно 325 тыс. долларов в год. Чтобы нанять ещё людей, нужно уже 500+. Конечно, спонсоры, типа Google, Microsoft и Bloomberg, здорово выручают и помогают собрать хорошую долю от этой суммы, но всё равно каждая копеечка имеет значение. Python всё-таки community language, так что было бы здорово и обычным рядовым пользователям немного скинуться.
Even if donations are a portion of the PSF's revenue, every dollar makes an impact and allows the PSF financial stability to continue supporting a growing community!
https://www.python.org/psf/donations/2021-q4-drive/
Python.org
2021 end-of-the-year fundraiser!
The official home of the Python Programming Language
Кстати, в честь этой кампании по сбору средств, JetBrains снова открыли свою акцию — покупаешь PyCharm с хорошей скидкой в 30%, а все собранные средства отправляются прямиком в PSF. Актуально до 1 декабря!
Звучит примерно как «покупайте наш наркотик, а все деньги с вашей первой дозы мы переведём голодающим африканским детям»😅
Шучу, конечно. Инициатива крайне правильная. Я искренне уважаю JetBrains за то, что они активно участвуют в жизни сообществ многих ЯП. И наркотик у них качественный, я уже давно сижу. Оно явно стоит своих денег. Но нужно понимать, что это просто лишь ещё один способ расширить пользовательскую базу. В прочем, почему бы и нет, это ведь идёт на пользу всем.
https://lp.jetbrains.com/support-python/
UPD: будьте внимательны, эта акция не применяется для продления уже активных подписок, только для новых!
#jetbrains
Звучит примерно как «покупайте наш наркотик, а все деньги с вашей первой дозы мы переведём голодающим африканским детям»😅
Шучу, конечно. Инициатива крайне правильная. Я искренне уважаю JetBrains за то, что они активно участвуют в жизни сообществ многих ЯП. И наркотик у них качественный, я уже давно сижу. Оно явно стоит своих денег. Но нужно понимать, что это просто лишь ещё один способ расширить пользовательскую базу. В прочем, почему бы и нет, это ведь идёт на пользу всем.
https://lp.jetbrains.com/support-python/
UPD: будьте внимательны, эта акция не применяется для продления уже активных подписок, только для новых!
#jetbrains
JetBrains
PyCharm: the Python IDE for data science and web development
The Python IDE for data science and web development with intelligent code completion, on-the-fly error checking, quick-fixes, and much more.
Forwarded from Python Заметки
В модуле logging предусмотрен немного необычный способ форматирования строки без форматирования.
Если вам требуется указать в строке сообщения какой-либо аргумент то обычно это делается форматированием строки
Функция записи сообщения должна быть очень быстрой. Да, она в любом случае занимает время, но чем меньше тем лучше. И особенно, когда это сообщение не проходит по фильтру уровня логирования.
Например, у меня установлен уровень WARNING и выполняется вот такой вызов
Сообщение не попадает под установленный уровень логирования и будет проигнорировано. Это обрабатывается сразу же первой командой в вызываемой функции debug. Но при этом форматирование строки всё равно произойдёт!
И проблема не в самом форматировании, которое достаточно быстрое (даже при складывании строк через "+"), а в тех возможных действиях, которые придется вызвать для преобразования объекта user в строку.
Возможно, там будет запрос в БД, разбор больших массивов данных или еще что-то не очень быстрое (или не очень умное🤪).
Нам всё это придётся посчитать чтобы потом.....ничего с этим не сделать.
Поэтому правильно писать так:
#libs #tricks
logging.info('Message %s %s', arg1, arg2)
На самом деле, если вы его не используете то вы делаете неправильно!⚠️Если вам требуется указать в строке сообщения какой-либо аргумент то обычно это делается форматированием строки
logging.info('New value is %s' % value)
Или любой другой доступный нам способlogging.info(f'New value is {value}')
logging.info(f'{value=}')
Кажется, всё логично, все так делают. Но нет, это ошибка! 😫Функция записи сообщения должна быть очень быстрой. Да, она в любом случае занимает время, но чем меньше тем лучше. И особенно, когда это сообщение не проходит по фильтру уровня логирования.
Например, у меня установлен уровень WARNING и выполняется вот такой вызов
logging.debug(f'Current user: {user}')
Что произойдет? Сообщение не попадает под установленный уровень логирования и будет проигнорировано. Это обрабатывается сразу же первой командой в вызываемой функции debug. Но при этом форматирование строки всё равно произойдёт!
И проблема не в самом форматировании, которое достаточно быстрое (даже при складывании строк через "+"), а в тех возможных действиях, которые придется вызвать для преобразования объекта user в строку.
Возможно, там будет запрос в БД, разбор больших массивов данных или еще что-то не очень быстрое (или не очень умное🤪).
Нам всё это придётся посчитать чтобы потом.....ничего с этим не сделать.
Поэтому правильно писать так:
logging.debug('Current user: %s', user)
Мы просто передаём подготовленную неформатированную строку и аргументы для форматирования, это не требует вычислений. Но само форматирование и сопутствующие вызовы произойдут только в случае когда это действительно потребуется, то есть уровень сообщения попадает под условия настройки текущего логгера.#libs #tricks
Python Заметки
В модуле logging предусмотрен немного необычный способ форматирования строки без форматирования. logging.info('Message %s %s', arg1, arg2) На самом деле, если вы его не используете то вы делаете неправильно!⚠️ Если вам требуется указать в строке сообщения…
Кстати, если решите на каком-нибудь рабочем проекте принять эту хорошую практику и пресечь такие ошибки в будущем, то нужна автоматизация. Потому что договорённости на словах обязательно забудутся.
Вот такой плагин для
#flake8
Вот такой плагин для
flake8
есть: https://github.com/globality-corp/flake8-logging-format#flake8
GitHub
GitHub - globality-corp/flake8-logging-format: Flake8 extension to validate (lack of) logging format strings
Flake8 extension to validate (lack of) logging format strings - globality-corp/flake8-logging-format
JetBrains Fleet — a lightweight editor but with a twist!
Вы посмотрите какая красота. Похоже, JetBrains вдохновились VSCode, учли все те проблемы, с которыми они страдают в последнее время в своих полноценных тяжелых монолитных IDE, и запилили свой легковесный редактор.
Уже существует минимум три способа, чтобы работать в IDE удаленно — CodeWithMe, Projector, Remote Development. И вот теперь есть ещё и четвертая альтернатива. Походу, JetBrains отчаянно пытается решить проблемы, которые порождены монолитностью их IDE (фронтенд и бэкенд нельзя/сложно отделить друг от друга). Возможно, другие попытки лишь отчасти решают проблему, поэтому JetBrains пилят новый редактор с нуля 🤔
Fleet уже поддерживает 7 популярных языков, в том числе и Python, конечно. Скоро добавят ещё языков.
Интересно за этим понаблюдать. Записался на превью (EAP).
https://blog.jetbrains.com/blog/2021/11/29/welcome-to-fleet/
#jetbrains
Вы посмотрите какая красота. Похоже, JetBrains вдохновились VSCode, учли все те проблемы, с которыми они страдают в последнее время в своих полноценных тяжелых монолитных IDE, и запилили свой легковесный редактор.
Уже существует минимум три способа, чтобы работать в IDE удаленно — CodeWithMe, Projector, Remote Development. И вот теперь есть ещё и четвертая альтернатива. Походу, JetBrains отчаянно пытается решить проблемы, которые порождены монолитностью их IDE (фронтенд и бэкенд нельзя/сложно отделить друг от друга). Возможно, другие попытки лишь отчасти решают проблему, поэтому JetBrains пилят новый редактор с нуля 🤔
Fleet уже поддерживает 7 популярных языков, в том числе и Python, конечно. Скоро добавят ещё языков.
Интересно за этим понаблюдать. Записался на превью (EAP).
https://blog.jetbrains.com/blog/2021/11/29/welcome-to-fleet/
#jetbrains
The JetBrains Blog
Welcome to Fleet! | The JetBrains Blog
Update (Dec 3, 2021): We’ve received an overwhelming number of requests for the Fleet Early Preview program. Unfortunately we can't accept any new requests, but we will continue sending invites to tho