Питонические атаки
1.19K subscribers
183 photos
4 videos
1 file
459 links
Всяческие заметки про программирование на Python и другие весёлые истории.
Download Telegram
Ура, товарищи! Достигнута очередная большая веха в развитии канала!

Во-первых, на канале уже 700+ читателей. Я раньше и подумать не мог, что кому-то может быть интересно читать мои потоки мыслей вперемешку со всякими статьями и ссылками, которые я нахожу занятными. Мне приятно. А если вы ещё и пишете комменты, то я вообще в восторге. Всегда рад пообщаться обо всем, что связано с моим любимым ЯП. Спасибо! ❤️

Во-вторых, на канал в комменты наконец-то пришли спамеры! Расцениваю это как отметку качества. Наконец-то они признали существование канала. Чтож, я ждал вас, механические ублюдки. Надо настроить бота, чтобы чистил комменты.
Forwarded from Python Daily
Если вы хотели попробовать сделать свою игру - вот список видео (+ бонус) с которых можно начать знакомство с pygame:

Введение: The ultimate introduction to Pygame
Тут объяснят основы: отрисовка изображений, позиционирование, коллизии, передвижение, анимации и т.д.

Большая и подробная серия видео про разработку платформера: Mario in Python with Pygame (and pirates)
Продолжение предыдущего ролика, которое объясняет такие вещи как: передвижение камеры, создание уровня в редакторе карт, глобальная карта локаций, UI и т.д.

Как работать с координатами в изометрических играх:
Introduction to Isometric Movement in Games
How Isometric Coordinates Work in 2D games

Основы создания тайлов для изометрических игр:
Pixel Art Class - Isometric Tile Basics!
Pixel Art Class - Isometric Character Basics

БОНУС
Огромный список примеров реализации разных механик и проблем: PyGame Examples and Answers

#pygame #gamedev #pydaily #nothabr
🔥 В 10:00 приходите на лайвкодинг во Fleet!

📹 «Лайвкодинг во Fleet, новой IDE от JetBrains»

Посмотрим на автодополнение, рефакторинг и анализ кода.
Попробуем написать код в несколько рук.
Испытаем IDE типовым проектом на Spring Boot.
Не про Python, но мы же все интересуемся новыми IDE. Через 40 минут начало стрима с лайвкодингом в JetBrains Fleet!

#jetbrains
моржовый оператор или что-то, я хз, я присваиваю через равно

#пятница #meme
Давайте на мгновение перестанем деградировать и почтим Python 3.6 минутой молчания. Это был хороший релиз, который принёс нам f-строки. Пожалуй, тот самый релиз, который многих заставил наконец обновиться с Python 2. Покойся с миром!

Нет, серьезно. Больше в 3.6 не будут исправляться даже проблемы безопасности. Вот представьте, что там найдётся что-то вроде нашумевшей джавовой уязвимости log4shell (а рано или поздно такое обязательно находится везде, ведь не бывает кода без проблем), и вы рискуете остаться с этим один на один. Мейнтейнеры питона пофиксят свежие версии, а 3.6 так и останется уязвимым. Так что если вы до сих пор используете 3.6, то крайне рекомендую обновиться раньше, чем к вам пришла беда.

По данным из PyPI stats, 15% загрузок все ещё происходят с 3.6. Вот не будьте такими. Лучше будьте как 1,5%, которые уже обновились до Python 3.10!

Хорошая статья по теме: https://pythonspeed.com/articles/stop-using-python-3.6/
Пользуясь случаем напоминаю, что 3.7 и 3.8 сейчас находятся на этапе security fixes only. То есть, если вы хотите, чтобы в вашем питоне исправлялись всякие баги с неправильным поведением и падениями, то вам нужно быть как минимум на 3.9.

Вот хорошая диаграмма, визуализирующая время жизни разных версий интерпретатора: https://python-release-cycle.glitch.me/
👍1🔥1
Всем, кто пережил праздники и постепенно возвращается к жизни — с очередным наступившим!

В последнее время почти перестал читать новости и статьи, поэтому и тем для постов стало резко меньше. Зато я стал больше гулять и передвигаться на общественном транспорте. Или, например, в электричке на 6 часов без интернета. В таких условиях прям здорово залипнуть в окошко и слушать какой-нибудь легкий бубнёж. Короче, в качестве компенсации за отсутствие постов хочу порекомендовать подкаст, который мне давно уже рекомендовали, но я только недавно до него добрался.

Moscow Python Podcast — это удивительно годное шоу. Я прослушал уже выпусков десять, и мне прям нравится. Вроде всего лишь лёгкие разговоры под кофеёк, но оно пропитано какой-то непередаваемой мудростью. Ведущие классные — особенно Гриша Петров, который для меня уже стал легендой российского айти. Длина выпусков тоже оптимальная — хоть не страшно включать, а то некоторые подкасты и по 3 часа делают выпуски.

Вот тут вы найдёте все ссылки: https://podcast.python.ru/

Я слушаю на Яндекс.Музыке, поэтому скину отдельно: https://music.yandex.com/album/6892837
👍5👎1
Forwarded from Code Mining
PyNose: a Test Smell Detector for Python

А ещё в прошлом году у JetBrains Research вышла определялка говнокода в python-тестах. Работает для Unittest & Pytest. Версия 1.0.0 вышла в декабре'21.

Виды test smell, которые выделяют авторы:
- Assertion Roulette
- Conditional Test Logic
- Constructor Initialization
- Default Test
- Duplicate Assert
- Empty Test
- Exception Handling
- Lack of Cohesion of Test Cases
- Magic Number Test
- Obscure In-Line Setup
- Redundant Assertion
- Redundant Print
- Sleepy Test
- Suboptimal Assert
- Test Maverick

Использовать можно в виде плагина к Pycharm.

Код: https://github.com/jetbrains-research/pynose

Подробности в статье: https://arxiv.org/abs/2108.04639. Единственное, она описывает предыдущую версию, которая в ветке ASE2021.
👍10🎉1🤩1💋1
Forwarded from UfoStation
Григорий Петров - Почему Python медленный?

Не смотря на заявленное название в докладе рассматриваются и другие языки, в том числе Java, C#, JavaScript и другие. Рекомендую к ознакомлению всем интересующимся языками программирования.
👍11
Forwarded from Senior Python Developer
Шуточный пакет pyjokes

Если в вашей крови течёт PEP, а дома вас ждёт домашняя змея в клетке, то и шутки вам нужны соответствующие. Вы всегда можете получить их с помощью модуля pyjokes. Устанавливается, как всегда, через pip.

Также есть отдельная категория с шутками Чака Норриса. Don't worry about tests, Chuck Norris's test cases cover your code too.
Forwarded from Хитрый Питон
Интересная статья про то, почему декоратором @lru_cache нельзя обертывать методы классов. Если коротко - объект не будет удаляться garbage collector-ом что может привести к неожиданным утечкам памяти. Также @lru_cache не умеет игнорировать self в списке аргументов, поэтому кэш будет для каждого объекта свой и кеширование по факту не будет работать.

С методами классов, статическими методами и обычными функциями работает, как и ожидается.

https://rednafi.github.io/reflections/dont-wrap-instance-methods-with-functoolslru_cache-decorator-in-python.html
В Windows 7 официально поддерживается только Python 3.8. Разработчики не хотят тратить ресурсы на поддержку мёртвых версий ОС. Более новые версии интерпретатора уже не устанавливаются. Но если сильно хочется, то есть форк cpython-win7, который поддерживает все современные версии языка (сейчас там есть 3.10.1) и при этом совместим с Windows 7.

Если же вместо абстрактных странных обоев вы предпочитаете классические зелёные луга, вместо спотифая вы включаете Winamp, а вместо Кортаны у вас ассистент Скрепыш, то для вас тоже есть форк. Windows XP официально поддерживается лишь в Python 3.4, но умельцы запускают версии вплоть до последних релизов из ветки 3.6. Придётся собирать из исходников, но разве это преграда для настоящего энтузиаста?

#windows #retro
👍4
Питонические атаки
В Windows 7 официально поддерживается только Python 3.8. Разработчики не хотят тратить ресурсы на поддержку мёртвых версий ОС. Более новые версии интерпретатора уже не устанавливаются. Но если сильно хочется, то есть форк cpython-win7, который поддерживает…
Кстати да, в комментариях напомнили про PPA-репозиторий deadsnakes для Ubuntu. В репо есть версии питона от очень старых до очень новых, и всё легко устанавливается через обычный привычный apt, предсобранное, не требует установки компиляторов и всего остального, что нужно для сборки. Вопреки названию, этот репо зачастую используется для установки более новых версий интерпретатора, чем поставляется в дистрибутиве ОС.

Запустил Ubuntu 18.04, установил на ней Python 2.3 (это самый старый из доступных для этой версии убунты). Это настолько древняя версия языка, что здесь даже нет контекст-менеджеров (да, они появились в 2.5). Сложно представить питон без контекст-менеджеров, ведь это настолько естественная часть языка, что кажется, что оно должно было быть в языке с самого начала.

#deadsnakes #ubuntu #linux #retro
В следующем релизе macOS Monterey 12.3 🍎, которая сейчас находится в бета-тестировании, обещают наконец-то удалить из системы предустановленный Python 2. Начиная с какой-то из предыдущих версий уже и так выскакивало окошко с предупреждением, если вдруг пайчарм случайно потрогает Python 2, а теперь устаревшая версия языка изгоняется из системы окончательно.

И это крайне логичное действие — незачем в системе держать легаси, которое лишь создаёт проблемы и путаницу. Большинство пользователей получат более компактную ОС и меньше проблем с выбором правильного интерпретатора, а те, кому всё ещё нужен Python 2, поставят его явно вручную. Они ведь всё равно уже привыкли страдать.

Пожалуй, макось из ныне живущих операционных систем продержалась со вторым питоном дольше всех.

Стоит отметить, что это не хейт отдельно взятого языка программирования. Эппл взяла курс на удаление многих скриптовых рантаймов, которые издревле поставлялись вместе с ОС, включая и Ruby, и Perl, и Python. Теперь всё это, если нужно, придётся ставить отдельно.

#macos #python2
👍1
О паттерн матчинге в python.

В 3.10, помимо всего прочего, завезли паттерн матчинг. И вы об этом, конечно, слышали. А вы слышали про functools'овый singledispatch который доступен аж со времён 3.4 и реализует матчинг типов аргументов в функции? Выглядит это так:


Recipient = Email | SmsNumber

@singledispatch
def send_message(message: str, recipient: Recipient):
raise NotImplemented()

@send_message.register
def send_message_via_email(message: str, recipient: Email):
# Send message via email by somehow

@send_message.register
def send_message_via_sms(message: str, recipient: SmsNumber):
# Send message via sms by somehow

some_email = Email('some@email.com')
some_phone = SmsNumber('+123456789')

send_message('message', some_email)
send_message('message', some_phone)


Ну практически haskell, нет? Увы, нет, ведь в python значение — это не то же самое что и тип, поэтому и возможности заматчить по значению у нас в этом случае нет. Но, так или иначе, singledispatch, бывает, здорово помогает организовать код лаконично и читаемо.

А вот чего в python не завезли (по, в целом, понятным причинам) так это возможности запилить sync и async реализации функции под одним именем. И это печально.
👍6🔥1
До какой версии языка вы готовы откатиться?

Я бы точно ни в коем случае не хотел жить без f-строк и тайп-аннотаций для переменных (3.6).

Неудобно было бы жить без breakpoint() (3.7), которая очень выручает в разных странных ситуациях, позволяя вывалиться в дебаггер. Вот вы помните, какое заклинание там раньше нужно было использовать, вместо этой удобной функции?

Короче, пожалуй, я согласен писать на Python 3.7, но не старше.

А есть ли какие-то фичи в более новых версиях, от которых вы не готовы отказаться?

https://snarky.ca/a-reverse-chronology-of-some-python-features/
🤯☺️☺️☺️☺️🤯☺️☺️☺️☺️🤯

Это если попытаться визуализировать версии питона по изменениям.

3.0 была шоком и прорывом, просто потому что язык сильно поменялся.

3.5 принесла асинхронность и тайп-аннотации.

3.10 принесла паттерн-матчинг, который тоже вероятно сильно повлияет на язык.

Короче, раз в 5 версий происходит революция. А промежуточные версии просто добавляют разные приятности. Если так и дальше пойдёт, то интересно, что же нам готовит 3.15?