Forwarded from Python Заметки
В PyCharm есть окно со статистикой продуктивности (Help / Productivity Guide), где отображена интересная информация об использовании IDE.
В частности, можно узнать сколько нажатий на кнопки вам сэкономил автокомплит.
У меня 231К за 14 месяцев !
Не плохо конечно, но клавиатура всё равно стёрлась)))
🙌⌨️😵
#offtop
В частности, можно узнать сколько нажатий на кнопки вам сэкономил автокомплит.
У меня 231К за 14 месяцев !
Не плохо конечно, но клавиатура всё равно стёрлась)))
🙌⌨️😵
#offtop
На Хабре в последнее время чего-то не так много интересных статей, но вот эта прям супер годная. Я пока не настолько хорош в иностранных языках, чтобы прям уверенно мочь читать художественную литературу в оригинале, так что обязательно как-нибудь попробую сделать себе параллельную книгу и перечитать что-нибудь типа «Автостопом по галактике». Наверное, в оригинале должно быть ещё круче.
https://habr.com/p/557664/
https://habr.com/p/557664/
Хабр
Сам себе Гутенберг. Делаем параллельные книги
Если вам нравится изучать языки (или вы их преподаете), то вы наверняка сталкивались с таким способом освоения языка как параллельное чтение. Он помогает погруз...
В очередной раз обновил пост про настройку точечного обхода блокировок на роутере, потому что сменил провайдера VPN. Теперь я пользуюсь Red Shield VPN — это VPN от админа канала @itsorm, так что дух цифрового сопротивления зашкаливает. Они буквально пару недель назад запилили поддержку WireGuard и теперь удовлетворяют всем моим запросам. И они вроде классные — скорость хорошая и по деньгам выходит раза в полтора дешевле, чем мой предыдущий VPN. Так как я уже очень привык не замечать козни Роскомнадзора, в этот раз я подписался на VPN сразу на год.
Если вам тоже такое интересно, то я там в посте приложил рефералку, по ней вам дадут месяц бесплатного VPN. А еще вот тут есть промокод на удешевлённый тариф.
Если вам тоже такое интересно, то я там в посте приложил рефералку, по ней вам дадут месяц бесплатного VPN. А еще вот тут есть промокод на удешевлённый тариф.
Питонические атаки
Настройка точечного обхода блокировок на роутере с OpenWRT
Как перестать думать о блокировках сайтов и начать жить
This media is not supported in your browser
VIEW IN TELEGRAM
Мигель Гринберг — широко известный в кругах пользователей Flask автор библиотек, туториалов и статей — изобрёл ещё одну классную штуку под названием
https://blog.miguelgrinberg.com/post/dynamically-update-your-flask-web-pages-using-turbo-flask
#flask
Turbo-Flask
. Этот плагин интегрирует во Flask-приложение фронтендовую библиотеку turbo.js
, которая слушает команды от сервера через WebSocket и обновляет части страницы динамически. Похоже, что в итоге можно сделать практически какую угодно динамическую логику на фронтенде, не написав ни одной строчки на JS. Если не учитывать того, что рендеринг всё-таки происходит на бэкенде, то выглядит это прям как настоящее SPA (Single Page Application).https://blog.miguelgrinberg.com/post/dynamically-update-your-flask-web-pages-using-turbo-flask
#flask
На недавно прошедшем Language Summit был презентован PEP 654 — Exception Groups and except*, который сейчас находится на стадии черновика и, вероятно, попадёт в язык в версии 3.11. Этот PEP предлагает добавить в Python возможность запускать сразу несколько не связанных друг с другом исключений, и обрабатывать тоже по несколько штук сразу в одном специальном блоке
Вот так можно будет запустить группу исключений:
Исключения
Да, группировка исключений — это весьма своеобразная фича. Авторы документа не предполагают, что такой способ работы с исключениями получит широкое распространение. Насколько я понимаю, этот новый механизм создаётся для решения каких-то специфичных проблем.
except*
. Это позволит более удобным образом спроектировать API в различных местах stdlib и сторонних библиотек, а также сделает поведение более правильным и в некоторых краевых случаях позволит не терять исключения.Вот так можно будет запустить группу исключений:
raise ExceptionGroup(
"everything is bad",
[
ValueError("bad value"),
TypeError("bad type")
],
)
Можно создавать из групп исключений целые иерархии и запускать их (вложить ExceptionGroup
внутрь ExceptionGroup
).Исключения
ExceptionGroup
можно перехватывать как обычные исключения (при помощи except
), а можно вот так разбивать группу на отдельные исключения и обрабатывать в каждом блоке except*
исключения только определенного типа:try:
...
except *TypeError:
print("type is bad")
except *ValueError as e:
assert isinstance(e, ExceptionGroup) # it's a group!
print("value is bad")
При выполнении куска кода выше по идее должно будет напечататься следующее:type is bad
value is bad
То есть будут выполнены сразу два блока except*
. Причём в каждый блок except*
приходит не одно исключение, а целая группа. Обработанные исключения удаляются из исходной группы, а необработанные идут по следующим блокам except*
. При разбивании группы исключений на подгруппы происходит обход группы как дерева. Если после проверки всех блоков группа исключений осталась непустой, то она рейзится дальше. Нельзя для одного блока try
иметь и обычный except
, и групповой except*
.Да, группировка исключений — это весьма своеобразная фича. Авторы документа не предполагают, что такой способ работы с исключениями получит широкое распространение. Насколько я понимаю, этот новый механизм создаётся для решения каких-то специфичных проблем.
peps.python.org
PEP 654 – Exception Groups and except* | peps.python.org
Python Enhancement Proposals (PEPs)
Питонические атаки
На недавно прошедшем Language Summit был презентован PEP 654 — Exception Groups and except*, который сейчас находится на стадии черновика и, вероятно, попадёт в язык в версии 3.11. Этот PEP предлагает добавить в Python возможность запускать сразу несколько…
Первое впечатление об этом документе у меня было такое: "ну и дичь". Когда попытался вникнуть получше и пересказать, то всё стало более-менее логично и понятно, но до сих пор не уверен, что те краевые случаи, которыми мотивировано добавление этого далеко не самого простого механизма, того стоят. Посмотрим, конечно, попадёт ли это в язык, и если попадёт, то в каком виде. Если уж над этим PEP работает сам Гвидо и его презентовали на языковом саммите, то, наверное, высоки шансы, что эта фича в том или ином виде пройдёт в язык.
Если что, слайды с презентации этого PEP можно найти в посте в блоге PSF: https://pyfound.blogspot.com/2021/05/the-2021-python-language-summit-pep-654.html
В мире браузерных языков транспиляция является очень распространенным явлением. Это довольно полезное действие, которое переводит код программы с одного языка на другой (зачастую, в JavaScript). Существуют множество языков, для которых единственным способом запуска является транспиляция в JavaScript. А еще часто код с более новых версий JS переводят в более старые, чтобы поддержать как можно больше браузеров.
В мире Python особой нужды в транспиляции нет, но, тем не менее, существуют проекты, которые её используют. Например, Coconut — надмножество языка Python, расширенное в сторону поддержки функционального программирования. Пишешь код на Coconut с красивыми лямбдами, пайплайнами и паттерн-матчингом, затем он транспилируется в обычный код на Python и запускается дальше как обычно. Код в итоге получается очень похожим на Haskell.
Вот что умеет Coconut по сравнению с Python:
* пайплайны (это когда результат работы предыдущей функции передаётся в следующую по цепочке) при помощи оператора
* сокращенный синтаксис для лямбда-функций;
* частичное применение функций;
* паттерн-матчинг (не совсем такой, как будет в 3.10, но он тоже поддерживается);
* присваивания с распаковками;
* расширенный синтаксис для тайп-аннотаций, интеграция с
* и многое другое (см. список на сайте проекта).
Даже если вы не собираетесь использовать функциональные расширения языка, можно просто писать код на обычном Python 3, а Coconut затем сделает ваш код универсальным, т.е. обеспечит его работу на предыдущих версиях языка, в том числе и на Python 2 (надеюсь, вы уже давно его не используете).
Это офигенно! Определенно стоит того, чтобы поиграться.
Узнал про Coconut вот из этой статьи на Хабре.
В мире Python особой нужды в транспиляции нет, но, тем не менее, существуют проекты, которые её используют. Например, Coconut — надмножество языка Python, расширенное в сторону поддержки функционального программирования. Пишешь код на Coconut с красивыми лямбдами, пайплайнами и паттерн-матчингом, затем он транспилируется в обычный код на Python и запускается дальше как обычно. Код в итоге получается очень похожим на Haskell.
Вот что умеет Coconut по сравнению с Python:
* пайплайны (это когда результат работы предыдущей функции передаётся в следующую по цепочке) при помощи оператора
|>
;* сокращенный синтаксис для лямбда-функций;
* частичное применение функций;
* паттерн-матчинг (не совсем такой, как будет в 3.10, но он тоже поддерживается);
* присваивания с распаковками;
* расширенный синтаксис для тайп-аннотаций, интеграция с
mypy
;* и многое другое (см. список на сайте проекта).
Даже если вы не собираетесь использовать функциональные расширения языка, можно просто писать код на обычном Python 3, а Coconut затем сделает ваш код универсальным, т.е. обеспечит его работу на предыдущих версиях языка, в том числе и на Python 2 (надеюсь, вы уже давно его не используете).
Это офигенно! Определенно стоит того, чтобы поиграться.
Узнал про Coconut вот из этой статьи на Хабре.
coconut-lang.org
Coconut Programming Language
Simple, elegant, Pythonic functional programming.
Известно ли вам про какие-нибудь другие языки, которые компилируются/транспилируются в Python?
Забавная статья, много безумных внутрянок питона затронуто. Сеттинг вот такой:
"Сложить два целых числа (от 1 до 99) без использования оператора 'плюс'. Дайте пять разных ответов"
https://habr.com/ru/post/555488/
"Сложить два целых числа (от 1 до 99) без использования оператора 'плюс'. Дайте пять разных ответов"
https://habr.com/ru/post/555488/
Хабр
Если у вас нет плюсов
Мой друг Алексей ищет работу и ходит на собеседования. После которых интересуется, как бы я ответил на некоторые из заданных вопросов. Отвечая на один такой вопрос, я слегка увлёкся, и материала...
Факт дня сомнительной полезности
А знали ли вы, что Hello World — программу, выводящую два этих слова — на Python можно записать в два слова?
Удачного дня сомнительной полезности!
А знали ли вы, что Hello World — программу, выводящую два этих слова — на Python можно записать в два слова?
>>> import __hello__Поздравляю, теперь вы профессиональный хелловорлд-разработчик! Идиоматично, кратко, лаконично, красиво! Обязательно щегольните этим скиллом на собеседовании или удивите коллег.
Hello world!
Удачного дня сомнительной полезности!
Кстати, неделю назад открылся ежегодный опросник за 2021 год от StackOverflow! Я уже сдал про себя всю подноготную. Предлагаю и вам пойти сделать то же самое. Через несколько месяцев, надеюсь, получим какие-нибудь интересные результаты. Каждый год их жду.
Пост в блоге StackOverflow: https://stackoverflow.blog/2021/05/25/the-2021-developer-survey-is-now-open/
Ссылка на опросник: https://stackoverflow.az1.qualtrics.com/jfe/form/SV_7arimtzVFf8ipfM?utm_source=twitter&utm_medium=social&utm_campaign=dev-survey-2021&utm_content=post-1
Пост в блоге StackOverflow: https://stackoverflow.blog/2021/05/25/the-2021-developer-survey-is-now-open/
Ссылка на опросник: https://stackoverflow.az1.qualtrics.com/jfe/form/SV_7arimtzVFf8ipfM?utm_source=twitter&utm_medium=social&utm_campaign=dev-survey-2021&utm_content=post-1
Stack Overflow Blog
The 2021 Developer Survey is now open!
The 2021 Developer Survey is ready for your input.
Записи выступлений с PyCon US 2021 выложили.
https://youtube.com/playlist?list=PL2Uw4_HvXqvYk1Y5P8kryoyd83L_0Uk5K
https://youtube.com/playlist?list=PL2Uw4_HvXqvYk1Y5P8kryoyd83L_0Uk5K
YouTube
PyCon US 2021
Share your videos with friends, family, and the world
Вопрос-поднаброс. А сможете ли без Википедии объяснить разницу между компилируемыми и интерпретируемыми языками?
Например, посмотрим как работает Java с высоты птичьего полёта. Исходный код на Java преобразуется в некое промежуточное представление (байткод), а затем некая виртуальная машина (JVM) выполняет этот байткод, преобразуя его в настоящие машинные инструкции.
А теперь с высоты птичьего помёта посмотрим как работает Python (конкретнее, CPython). Исходный код на Python преобразуется в некое промежуточное представление (байткод), а затем некая виртуальная машина (PVM) выполняет этот байткод, преобразуя его в настоящие машинные инструкции.
Если принцип один и тот же, то почему Java — компилируемый, а Python — интерпретируемый?
Например, посмотрим как работает Java с высоты птичьего полёта. Исходный код на Java преобразуется в некое промежуточное представление (байткод), а затем некая виртуальная машина (JVM) выполняет этот байткод, преобразуя его в настоящие машинные инструкции.
А теперь с высоты птичьего помёта посмотрим как работает Python (конкретнее, CPython). Исходный код на Python преобразуется в некое промежуточное представление (байткод), а затем некая виртуальная машина (PVM) выполняет этот байткод, преобразуя его в настоящие машинные инструкции.
Если принцип один и тот же, то почему Java — компилируемый, а Python — интерпретируемый?
Интересный и забавный пост, где некий сеньёр-разработчик под винцо подытоживает уроки, полученные за 10 лет карьеры в IT.
https://www.reddit.com/r/ExperiencedDevs/comments/nmodyl/drunk_post_things_ive_learned_as_a_sr_engineer/
https://www.reddit.com/r/ExperiencedDevs/comments/nmodyl/drunk_post_things_ive_learned_as_a_sr_engineer/
Reddit
From the ExperiencedDevs community on Reddit
Explore this post and more from the ExperiencedDevs community
Как же приятно наблюдать за настоящим профессионалом за работой. Тоже иногда хочется взять и распечатать на принтере весь проект на 20к строк в виде скриншотов IDE с тёмной темой.
Кстати, вроде похоже на питон, да ведь?
via Reddit
Кстати, вроде похоже на питон, да ведь?
via Reddit
Чему Мстители могут научить нас о Git?
Интересная статья, где сюжетные повороты с путешествиями во времени из Мстителей объясняются с точки зрения Git. Содержит спойлеры!
https://ljvmiranda921.github.io/notebook/2021/06/05/avengers-git/
#git
Интересная статья, где сюжетные повороты с путешествиями во времени из Мстителей объясняются с точки зрения Git. Содержит спойлеры!
https://ljvmiranda921.github.io/notebook/2021/06/05/avengers-git/
#git
ljvmiranda921.github.io
What can Avengers: Endgame teach us about Git?
Avengers and Git? The most ambitious crossover event in history. In this blog post, I will explain crucial plot points in Avengers: Endgame in five Git conce...
Интересное интервью с Гвидо ван Россумом, на основе которого в последнее время порождается много новостей в инфополе вокруг Python.
Мне в целом понравилось, но можете не смотреть, потому что вот ключевые моменты:
* Во время работы над ОС Amoeba Гвидо столкнулся с непреодолимой прокрастинацией, потому что приходилось писать много кода на C и шелл-скриптах. Так и появился Python, какое-то время он применялся в разработке этой ОС, но в итоге она загнулась, а Python внезапно обрёл популярность.
* Код с
* Гвидо никогда не увлекался ФП.
* Генераторы и list comprehensions сильно поменяли язык, дали ещё один толчок к росту популярности в Python.
* Некоторые идеи в плане типизации Python тащит из TypeScript, потому что языки в некотором смысле похожи.
* Гвидо не слишком оптимистичен по поводу запуска Python в браузере или на смартфонах. Слишком другое окружение, а язык изначально рассчитан для работы на мейнфреймах/ПК.
* Скорее всего Python 4.0 никогда не наступит, если только не случится какое-то фатально ломающее изменение (например, на уровне совместимости с нативными расширениями, изменение механизмов работы сборщика мусора или выпиливание GIL), чего разработчики сильно стараются избегать. Переход со второй на третью версию был слишком болезненным.
* Гвидо предполагает, что под-интерпретаторы (sub-interpreters) помогут решить проблему GIL. Его не придётся удалять, но мешать он больше не будет.
* Гвидо любит кататься на велосипеде, но не больше пары часов за заезд.
Прикольно, что у Гвидо очень понятный акцент. Возможно, это потому что английский — не его родной язык?
https://www.youtube.com/watch?v=aYbNh3NS7jA
#конспект
Мне в целом понравилось, но можете не смотреть, потому что вот ключевые моменты:
* Во время работы над ОС Amoeba Гвидо столкнулся с непреодолимой прокрастинацией, потому что приходилось писать много кода на C и шелл-скриптах. Так и появился Python, какое-то время он применялся в разработке этой ОС, но в итоге она загнулась, а Python внезапно обрёл популярность.
* Код с
reduce()
сложно понимать, поэтому Гвидо убрал эту функцию из built-ins. map()
и filter()
— норм, но в языке есть для них более приятные альтернативы.* Гвидо никогда не увлекался ФП.
* Генераторы и list comprehensions сильно поменяли язык, дали ещё один толчок к росту популярности в Python.
* Некоторые идеи в плане типизации Python тащит из TypeScript, потому что языки в некотором смысле похожи.
* Гвидо не слишком оптимистичен по поводу запуска Python в браузере или на смартфонах. Слишком другое окружение, а язык изначально рассчитан для работы на мейнфреймах/ПК.
* Скорее всего Python 4.0 никогда не наступит, если только не случится какое-то фатально ломающее изменение (например, на уровне совместимости с нативными расширениями, изменение механизмов работы сборщика мусора или выпиливание GIL), чего разработчики сильно стараются избегать. Переход со второй на третью версию был слишком болезненным.
* Гвидо предполагает, что под-интерпретаторы (sub-interpreters) помогут решить проблему GIL. Его не придётся удалять, но мешать он больше не будет.
* Гвидо любит кататься на велосипеде, но не больше пары часов за заезд.
Прикольно, что у Гвидо очень понятный акцент. Возможно, это потому что английский — не его родной язык?
https://www.youtube.com/watch?v=aYbNh3NS7jA
#конспект
YouTube
Q&A with Guido van Rossum, Inventor of Python
Guido van Rossum is a Dutch programmer best known as the creator of the Python programming language, for which he was the "Benevolent dictator for life" (BDFL) . Come join us for an open Q/A "Ask me Anything" to get to know how PyCon was born and Guido's…