Питонические атаки
1.19K subscribers
183 photos
4 videos
1 file
459 links
Всяческие заметки про программирование на Python и другие весёлые истории.
Download Telegram
Известно ли вам про какие-нибудь другие языки, которые компилируются/транспилируются в Python?
Забавная статья, много безумных внутрянок питона затронуто. Сеттинг вот такой:

"Сложить два целых числа (от 1 до 99) без использования оператора 'плюс'. Дайте пять разных ответов"

https://habr.com/ru/post/555488/
Факт дня сомнительной полезности

А знали ли вы, что 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
Вопрос-поднаброс. А сможете ли без Википедии объяснить разницу между компилируемыми и интерпретируемыми языками?

Например, посмотрим как работает 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/
Как же приятно наблюдать за настоящим профессионалом за работой. Тоже иногда хочется взять и распечатать на принтере весь проект на 20к строк в виде скриншотов IDE с тёмной темой.

Кстати, вроде похоже на питон, да ведь?

via Reddit
Чему Мстители могут научить нас о Git?

Интересная статья, где сюжетные повороты с путешествиями во времени из Мстителей объясняются с точки зрения Git. Содержит спойлеры!

https://ljvmiranda921.github.io/notebook/2021/06/05/avengers-git/

#git
Интересное интервью с Гвидо ван Россумом, на основе которого в последнее время порождается много новостей в инфополе вокруг Python.

Мне в целом понравилось, но можете не смотреть, потому что вот ключевые моменты:

* Во время работы над ОС 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

#конспект
Результаты опроса аудитории Telegram от TGStat за 2021 подъехали.

https://tgstat.ru/research-2021

Типичный пользователь телеграма — это мужчина 25-34 лет, проживающий в Москве, айтишник с высшим образованием и зарплатой 16-30 тыс. рублей. Держись, чувак, всё будет хорошо! 💪
Полезная ссылка для мониторинга ситуации вокруг инфраструктуры Python: https://status.python.org/

Спасибо @zotho!
Forwarded from Python etc
Some operators in Python have special names.
Many Pythonistas know about the notorious "walrus" operator (:=), but there are less famous
ones like the diamond operator (<>) — it's similar to the "not equals" operator but written in SQL style.
The diamond operator was suggested in PEP 401 as one of
the first actions of the new leader of the language Barry Warsaw after Guido went climbing Mount Everest.
Luckily, it was just an April Fool joke and the operator was never really a part of the language.
Yet, it's still available but hidden behind the "import from future" flag.

Usually you compare for non-equality using !=:

>>> "bdfl" != "flufl"
True


But if you enable the "Barry as FLUFL" feature the behavior changes:

>>> from __future__ import barry_as_FLUFL
>>> "bdfl" != "flufl"
File "<stdin>", line 1
"bdfl" != "flufl"
^
SyntaxError: with Barry as BDFL, use '<>' instead of '!='
>>> "bdfl" <> "flufl"
True


Unfortunately, this easter egg is only working in interactive mode (REPL), but not in usual *.py scripts.

By the way, it's interesting that this feature is marked as becoming mandatory in Python 4.0.
Да, загадка странная, но вопрос возник в реальной практике
Сможете угадать, что выведет последняя инструкция?
Anonymous Quiz
8%
bar
10%
{bar}
18%
{'bar'}
10%
{ {bar} }
4%
foo
2%
{'foo'}
8%
{foo}
6%
{ {foo} }
34%
NameError
Вышел релиз тайп-чекера mypy с круглой версией 0.900 и длинным списком изменений. Переход на новую версию потребует некоторых действий.

https://mypy-lang.blogspot.com/2021/06/mypy-0900-released.html

Самым крупным (и ломающим) изменением в этой версии является то, как mypy ищет тайп-аннотации. Раньше у mypy внутри был вшит весь репозиторий typeshed, где хранилась информация о типах и для стандартной библиотеки, и для множества популярных (и не очень популярных) библиотек с PyPI, которые почему-то не могут или не хотят хранить типы прямо у себя в коде. Это было неудобно, потому что исправления в typeshed (а там постоянно что-то фиксят) становились доступны пользователям mypy только при очередном релизе mypy с задержкой в несколько месяцев. А ещё вместе с mypy вам в проект прилетали тайп-аннотации для кучи библиотек, которыми вы не пользуетесь.

Короче, теперь у mypy в комплекте есть типы только для стандартной библиотеки, а typeshed из одной царь-библиотеки распался на много маленьких, и вам нужно явно установить те из них, которые вам нужны. Например, если вы используете requests, то вам нужно доустановить пакет types-requests, иначе mypy будет не хватать информации о типах. Для этих маленьких пакетов с типами будут автоматически создаваться новые релизы при каждом изменении, вам нужно будет обновлять их время от времени независимо от mypy.

Ещё из полезного добавлена поддержка кастомных тайп-гардов. Грубо говоря, теперь вы можете описать любую сколь угодно замысловатую логику валидации данных в функции (скорее всего это будет что-то с вызовами isinstance()), и после вызова этой функции mypy сможет более точно вывести тип данных.

Из других, менее крупных изменений отмечу следующие:

* mypy по умолчанию больше не работает для Python 2 кода; возможность проверять такой код всё ещё есть, но для этого нужно устанавливать дополнительные зависимости;
* mypy научился читать свою конфигурацию из pyproject.toml.

Мне нравится, что в Python появляется всё больше инструментов для типизации, а тайп-чекеры конкурируют между собой и становятся умнее.
Вам на собеседовании задают вопрос: "Расскажите о положительных сторонах GIL". Что бы вы ответили?