В последний год вы использовали в своем коде __init__?
Anonymous Poll
66%
Да
13%
Нет
11%
Я не помню, что было на завтрак, а вы просите год назад вспомнить
9%
Хочу увидеть результат
Почему все реже встречается __init__
В питоническом комьюнити некоторые призывают отказаться от пользовательских методов
До Python 3.7 разработчикам приходилось вручную определять этот метод для инициализации атрибутов экземпляра класса. Например, чтобы создать объект
С появлением «структур данных» необходимость в ручном определении
Это не единственное решение: Создание объектов через фабричные методы позволяет (@classmethod) отделить логику инициализации от конструкции объекта.
Вот еще пример проблемы, вызванной пользовательским методом инициализации:
Атрибуты, инициализируемые в
#основы
@zen_of_python
В питоническом комьюнити некоторые призывают отказаться от пользовательских методов
__init__
в контексте dataclasses.До Python 3.7 разработчикам приходилось вручную определять этот метод для инициализации атрибутов экземпляра класса. Например, чтобы создать объект
2DCoordinate(x=1, y=2)
, необходимо было явно прописать метод __init__
с параметрами x
и y
. Альтернативы — фабричные функции и абстрактные классы, были менее удобны и приводили к усложнению кода.С появлением «структур данных» необходимость в ручном определении
__init__
для простых структур данных отпала:
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
person = Person(name="Alice", age=30)
print(person)
Это не единственное решение: Создание объектов через фабричные методы позволяет (@classmethod) отделить логику инициализации от конструкции объекта.
Вот еще пример проблемы, вызванной пользовательским методом инициализации:
class FooBarWidget(FooWidget):
def __init__(self):
self.publisher = zmq.Context.instance().socket(zmq.PUSH)
self._init()
def _init(self):
def worker_thread_start():
FooWidget.__init__(self)
self.run()
worker_thread = Thread(target=worker_thread_start, daemon=True)
worker_thread.start()
Атрибуты, инициализируемые в
FooWidget.__init__
, могут быть недоступны в основном потоке до завершения инициализации в дочернем потоке, что вызывает ошибки при обращении к ним.#основы
@zen_of_python
Telegram
Zen of Python
Полный Дзен Пайтона в одном канале
Разместить рекламу: @tproger_sales_bot
Правила общения: https://tprg.ru/rules
Другие каналы: @tproger_channels
Сайт: https://tprg.ru/site
Регистрация в перечне РКН: https://tprg.ru/xZOL
Разместить рекламу: @tproger_sales_bot
Правила общения: https://tprg.ru/rules
Другие каналы: @tproger_channels
Сайт: https://tprg.ru/site
Регистрация в перечне РКН: https://tprg.ru/xZOL
❤1👍1🌭1
Качество кода в эпоху LLM
Один из сеньоров сказал на одной конференции:
«Если разработчик не использует LLM для автоматизации рутины, то он просто тратит ресурсы своей компании»
Вот на таком прокрустовом ложе мы с вами оказались: c LLM база мгновенно забывается, без нее — пишешь / отлаживаешь медленнее.
ИИ-ассистенты:
— генерируют код по промту;
— предлагают автодополнение на основе контекста;
— подсказывают, как улучшить код.
Но они реактивные — не анализируют весь проект автоматически. ИИ не гарантирует соответствие стандартам проекта, превращая код в кашу.
Если вы уже не готовы отказаться от копайлотов вроде ChatGPT или Cursor, с качеством кода помогут несправедливо забытые:
— линтеры (pylint, flake8);
— тайпчекеры (mypy);
— security-сканеры (bandit);
— «покрыватели тестами» (coverage, pytest-cov);
— профилировщики (cProfile).
Вышеописанные инструменты:
— формализуют согласно стандарту PEP8;
— находят ошибки, неиспользуемые импорты, — «мертвый код», несоответствия типов (
— работают без контекста задачи — поэтому «беспристрастны»;
#инструмент #основы
@zen_of_python
Один из сеньоров сказал на одной конференции:
«Если разработчик не использует LLM для автоматизации рутины, то он просто тратит ресурсы своей компании»
Вот на таком прокрустовом ложе мы с вами оказались: c LLM база мгновенно забывается, без нее — пишешь / отлаживаешь медленнее.
ИИ-ассистенты:
— генерируют код по промту;
— предлагают автодополнение на основе контекста;
— подсказывают, как улучшить код.
Но они реактивные — не анализируют весь проект автоматически. ИИ не гарантирует соответствие стандартам проекта, превращая код в кашу.
Если вы уже не готовы отказаться от копайлотов вроде ChatGPT или Cursor, с качеством кода помогут несправедливо забытые:
— линтеры (pylint, flake8);
— тайпчекеры (mypy);
— security-сканеры (bandit);
— «покрыватели тестами» (coverage, pytest-cov);
— профилировщики (cProfile).
Вышеописанные инструменты:
— формализуют согласно стандарту PEP8;
— находят ошибки, неиспользуемые импорты, — «мертвый код», несоответствия типов (
mypy
);— работают без контекста задачи — поэтому «беспристрастны»;
#инструмент #основы
@zen_of_python
👍5👎1
This media is not supported in your browser
VIEW IN TELEGRAM
pipask | pip, который не пропустит зловред
Дожили: через pypi.org можно слить свои креды / логопассы и дать возможность майнить крипту мошенникам. Покаадмин плачет в сторонке вас еще миновала участь установить нечто злое, попробуйте вместо привычных менеджеров зависимостей pipask: он использует метаданные, чтобы оценить вероятность угрозы и подтягивает базу osv.dev (про уязвимости).
Ждем, когда PSF сшерлочат эту фичу.
Репозиторий проекта
#инструмент
@zen_of_python
Дожили: через pypi.org можно слить свои креды / логопассы и дать возможность майнить крипту мошенникам. Пока
Ждем, когда PSF сшерлочат эту фичу.
Репозиторий проекта
#инструмент
@zen_of_python
👍3✍2
orbital | Обработка датасета прямо из БД
Если вам довелось готовить собственные датасеты перед загрузкой в модель и запускать пайплайны scikit-learn, то повторять такое на каждом банче из БД на SQL вы точно не захотите. Этот инструмент как раз превращает типовые операции StandardScaler, OneHotImputer, SimpleImputer и многие другие.
Проект на GitHub
#инструмент
@zen_of_python
Если вам довелось готовить собственные датасеты перед загрузкой в модель и запускать пайплайны scikit-learn, то повторять такое на каждом банче из БД на SQL вы точно не захотите. Этот инструмент как раз превращает типовые операции StandardScaler, OneHotImputer, SimpleImputer и многие другие.
Проект на GitHub
#инструмент
@zen_of_python
✍1🍌1
pytest-testmon | Крохотная автоматизация тестов
Счастлив тот питонист, чей работодатель имеет ресурс на тестирование своего кода. Эта библиотека позволяет автоматически покрывать тестами только затронутые изменениями участки кода, снимая с вас эту нагрузку.
Проект на pypi.org
#инструмент
@zen_of_python
Счастлив тот питонист, чей работодатель имеет ресурс на тестирование своего кода. Эта библиотека позволяет автоматически покрывать тестами только затронутые изменениями участки кода, снимая с вас эту нагрузку.
Проект на pypi.org
#инструмент
@zen_of_python
👍1🌚1
Forwarded from Код найма
Расскажите про свой опыт поиска работы
Мы сейчас проводим исследование — хотим разобраться, как айтишники ищут работу: на что обращаете внимание в вакансии, что для вас точно красный флаг, а что — зеленая простыня. Мы хотим из первых уст узнать про все боли, подводные камни и нюансы рекрутинга в ИТ в 2025 году, поэтому просим вашей помощи — пройдите опрос, который займет у вас около 15 минут.
Давайте поможем компаниям и специалистам эффективнее и быстрее находить друг друга.
Мы сейчас проводим исследование — хотим разобраться, как айтишники ищут работу: на что обращаете внимание в вакансии, что для вас точно красный флаг, а что — зеленая простыня. Мы хотим из первых уст узнать про все боли, подводные камни и нюансы рекрутинга в ИТ в 2025 году, поэтому просим вашей помощи — пройдите опрос, который займет у вас около 15 минут.
Давайте поможем компаниям и специалистам эффективнее и быстрее находить друг друга.
👍1🎃1
Вопросы подписчиков
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте.
#вопросы_новичков
@zen_of_python
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте.
#вопросы_новичков
@zen_of_python
питоническии_трон.png
1.7 MB
Раз вам зашел питонический фон для созвонов от ChatGPT, оцените, на что способен Midjourney, если не скупиться на слова в промте:
#кек
@zen_of_python
#кек
@zen_of_python
👍6🥱3😍2
Между гадалками и LLM для верстки сайтов есть нечто общее: обе оперируют узким проверенным словарем на ~1000 слов, чтобы выразить свои мысли и при этом попасть в "болевые точки" клиента.
#кек
@zen_of_python
#кек
@zen_of_python
👍3😁1
Кто из вас сильный? Признавайтесь, надо мебель в соседнем классе перенести.
#кек
@zen_of_python
😎 — как мощны мои лапищи
🌚 — пишу с нейрокопайлотами
#кек
@zen_of_python
😎 — как мощны мои лапищи
🌚 — пишу с нейрокопайлотами
😎19🌚10👍3👨💻1
PyXL | Python + Bare Metal
Код можно интерпретировать непосредственно на железе без виртуальной машины (VM) и JIT-компиляции. Это положительно скажется на скорости.
Среди возможностей:
— собственный процессор, исполняющий байт-код Python напрямую, минуя традиционные интерпретаторы;
— высокая скорость отклика GPIO: В тестах на плате Arty-Z7-20 с FPGA Zynq-7000 PyXL демонстрирует время отклика GPIO в 480 наносекунд, что в 30 раз быстрее, чем у MicroPython на PyBoard;
На сайт проекта
#инструмент
@zen_of_python
Код можно интерпретировать непосредственно на железе без виртуальной машины (VM) и JIT-компиляции. Это положительно скажется на скорости.
Среди возможностей:
— собственный процессор, исполняющий байт-код Python напрямую, минуя традиционные интерпретаторы;
— высокая скорость отклика GPIO: В тестах на плате Arty-Z7-20 с FPGA Zynq-7000 PyXL демонстрирует время отклика GPIO в 480 наносекунд, что в 30 раз быстрее, чем у MicroPython на PyBoard;
На сайт проекта
#инструмент
@zen_of_python
data-analyst.pdf
106.1 KB
Коллекция питонических роадмапов
Вашему вниманию дорожные карты из Py-мира с небезызвестного сайта roadmap.sh.
По технологиям:
— Python;
— SQL;
По специальностям:
— Data Engineer (потребуется VPN);
— Data Analyst;
— Data Scientist;
И даже Prompt Engineer, если вы хотите позабавиться или ужаснуться.
#основы
@zen_of_python
Вашему вниманию дорожные карты из Py-мира с небезызвестного сайта roadmap.sh.
По технологиям:
— Python;
— SQL;
По специальностям:
— Data Engineer (потребуется VPN);
— Data Analyst;
— Data Scientist;
И даже Prompt Engineer, если вы хотите позабавиться или ужаснуться.
#основы
@zen_of_python
This media is not supported in your browser
VIEW IN TELEGRAM
django-action-triggers | Вебхуки для всего отовсюду на Django
Библиотека позволяет инициировать всевозможные события на вашем Django-сайте по триггеру — апдейту базы данных. В отличие от т.н. сигналов, могут управляться динамически, без редеплоя.
Репозиторий проекта
@zen_of_python
Библиотека позволяет инициировать всевозможные события на вашем Django-сайте по триггеру — апдейту базы данных. В отличие от т.н. сигналов, могут управляться динамически, без редеплоя.
Репозиторий проекта
@zen_of_python
👍1
Forwarded from Типичный программист
Делитесь своим опытом в опросе про облака
Мы готовим большое исследование по облачным технологиям и хотим узнать ваше мнение.
Расскажите, как вы работаете с облаками, какие у вас возникают вопросы или трудности. Фидбэк можно оставить в этой гугл-форме
Спасибо🙏
Мы готовим большое исследование по облачным технологиям и хотим узнать ваше мнение.
Расскажите, как вы работаете с облаками, какие у вас возникают вопросы или трудности. Фидбэк можно оставить в этой гугл-форме
Спасибо
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9👍4🔥2
В чем сила аннотаций типов
Type Hints — годный инструмент, ибо помогают находить ошибки типов ещё до запуска кода, но настоящая их сила в другом. С ними вы думаете о структуре данных, делая код менее ломким. Появились в Python 3.5 в 2015 году и прижились так хорошо. что даже IDE напоминают вам о них ворнингами.
Взгляните на функцию, что вычисляет скидку для списка товаров:
Всё работает, но не совсем понятно:
— Что именно items? Список? Кортеж? Генератор?
— Какой тип у
— Что возвращает функция?
Код «самопроясняется», если добавить
Мы можем пойти дальше. Зачем ограничивать функцию только
Теперь
Это и есть главное преимущество Type Hints: они заставляют задуматься — а не слишком ли жёсткие ограничения я накладываю на входные данные? А не стоит ли сделать интерфейс функции более абстрактным?
Допустим, вы проектируете класс заказа. Если сначала использовали List для хранения товаров, то подумав о типах, вы можете заменить это на Set, чтобы избежать повторений. Или вместо хранения всех элементов в памяти начать использовать генератор для ленивой загрузки данных из базы.
Аннотации типов подталкивают вас к обобщённому проектированию, где функции и классы не зависят от конкретных реализаций.
#основы
@zen_of_python
Type Hints — годный инструмент, ибо помогают находить ошибки типов ещё до запуска кода, но настоящая их сила в другом. С ними вы думаете о структуре данных, делая код менее ломким. Появились в Python 3.5 в 2015 году и прижились так хорошо. что даже IDE напоминают вам о них ворнингами.
Взгляните на функцию, что вычисляет скидку для списка товаров:
def calculate_discount(items, discount):
return [item * (1 - discount) for item in items]
Всё работает, но не совсем понятно:
— Что именно items? Список? Кортеж? Генератор?
— Какой тип у
discount
?— Что возвращает функция?
Код «самопроясняется», если добавить
typing
.List:
from typing import List
def calculate_discount(items: List[float], discount: float) -> List[float]:
return [item * (1 - discount) for item in items]
Мы можем пойти дальше. Зачем ограничивать функцию только
List[float]
, если она также могла бы принять кортеж, множество или генератор?
from collections.abc import Iterable
def calculate_discount(items: Iterable[float], discount: float) -> List[float]:
return [item * (1 - discount) for item in items]
Теперь
items
— любая итерируемая структура: список, кортеж, генератор. Такой подход делает функцию более универсальной.Это и есть главное преимущество Type Hints: они заставляют задуматься — а не слишком ли жёсткие ограничения я накладываю на входные данные? А не стоит ли сделать интерфейс функции более абстрактным?
Допустим, вы проектируете класс заказа. Если сначала использовали List для хранения товаров, то подумав о типах, вы можете заменить это на Set, чтобы избежать повторений. Или вместо хранения всех элементов в памяти начать использовать генератор для ленивой загрузки данных из базы.
Аннотации типов подталкивают вас к обобщённому проектированию, где функции и классы не зависят от конкретных реализаций.
Входы — как можно шире, выходы — как можно конкретнее.
#основы
@zen_of_python
Telegram
Zen of Python
Полный Дзен Пайтона в одном канале
Разместить рекламу: @tproger_sales_bot
Правила общения: https://tprg.ru/rules
Другие каналы: @tproger_channels
Сайт: https://tprg.ru/site
Регистрация в перечне РКН: https://tprg.ru/xZOL
Разместить рекламу: @tproger_sales_bot
Правила общения: https://tprg.ru/rules
Другие каналы: @tproger_channels
Сайт: https://tprg.ru/site
Регистрация в перечне РКН: https://tprg.ru/xZOL
👍1
Tail Calls в Python: грокаем
Внезапно банк Точка пояснил за «хвостовые вызовы» — механизме из подкапотного C, который значительно ускорил Python в релизах конца 2024 года. Статья не для новичков, но если прорветесь, сможете щеголять на собеседованиях.
#основы
@zen_of_python
Внезапно банк Точка пояснил за «хвостовые вызовы» — механизме из подкапотного C, который значительно ускорил Python в релизах конца 2024 года. Статья не для новичков, но если прорветесь, сможете щеголять на собеседованиях.
#основы
@zen_of_python
👍1👨💻1
Microsoft отказалась от поддержки Faster CPython — команда проекта уволена
Вот так просто: собрал команду, распустил команду... Если ты в Microsoft, конечно. IT-гигант поставил не на ту лошадь и запланировал ускорить язык за счет его основной реализации, но PSF опередили со своими Tail Calls.
👀 — я думал(-а), питонисты неуязвимые
🎃 — ожидаемое поведение корпораций
#факт
@zen_of_python
Вот так просто: собрал команду, распустил команду... Если ты в Microsoft, конечно. IT-гигант поставил не на ту лошадь и запланировал ускорить язык за счет его основной реализации, но PSF опередили со своими Tail Calls.
👀 — я думал(-а), питонисты неуязвимые
🎃 — ожидаемое поведение корпораций
#факт
@zen_of_python
🎃41👀8🌚2😭2
Ошибки, которые можно избежать в SQL: грабли начинающего аналитика
Если вы только начинаете работать с SQL, статья поможет избежать типичных ошибок (пропуски, доступы, производительность).
Там вы узнаете, почему важно проверять данные после объединения таблиц и как избежать потери строк при использовании
#основы #sql
@zen_of_python
Если вы только начинаете работать с SQL, статья поможет избежать типичных ошибок (пропуски, доступы, производительность).
Там вы узнаете, почему важно проверять данные после объединения таблиц и как избежать потери строк при использовании
JOIN
.#основы #sql
@zen_of_python
👍5🔥2❤1