IceCream
В этом примере кода вывод
IceCream — это библиотека, которая предоставляет простой и эффективный способ отладки кода. Вместо того чтобы использовать функцию print() для отладки, вы можете использовать функцию ic() из библиотеки IceCream, которая позволяет вам инспектировать переменные, выражения и выполнение программы с помощью одного простого вызова функции.В этом примере кода вывод
ic| указывает на то, что это вывод от IceCream, а result: 6 — имя переменной и ее значение.IceCream может быть использован в любом месте, где требуется отладка кода: веб-разработка, научные вычисления, анализ данных и т.д.👍6
This media is not supported in your browser
VIEW IN TELEGRAM
😮 92% подписчиков этих каналов не просто мечтатели, а реальные python-программисты, которые каждый день пишут код для реальных проектов!
Вот эти каналы, где реально полезная инфа на каждый день:
👩💻 Python — каждый день новые знания для кодера любого уровня
👩💻 Backend — мастхев канал для бекендера
👩💻 Code Tests — идеальные тесты для проверки знаний
🔒Сделали бесплатный вход только на 48 часов, успей залететь!
Вот эти каналы, где реально полезная инфа на каждый день:
👩💻 Python — каждый день новые знания для кодера любого уровня
👩💻 Backend — мастхев канал для бекендера
👩💻 Code Tests — идеальные тесты для проверки знаний
🔒Сделали бесплатный вход только на 48 часов, успей залететь!
❤1
Метод `__missing__` для работы с отсутствующими ключами в словарях
Если вы создаёте собственный тип данных, основанный на словарях, полезно использовать метод
При переопределении этого метода, вы получаете полный контроль над тем, что происходит в случае отсутствия ключа, вместо того чтобы полагаться на стандартное поведение, например, выброс исключения
Если вы создаёте собственный тип данных, основанный на словарях, полезно использовать метод
__missing__. Этот метод позволяет задать поведение, которое будет выполняться, когда запрашиваемый ключ отсутствует в словаре. Например, можно вернуть значение по умолчанию или вызвать ошибку, если ключ не найден.При переопределении этого метода, вы получаете полный контроль над тем, что происходит в случае отсутствия ключа, вместо того чтобы полагаться на стандартное поведение, например, выброс исключения
KeyError.👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Vibe Draw — простой и удобный инструмент для 3D-моделирования
Vibe Draw — это интуитивно понятная программа для создания 3D-моделей, которая превращает ваши 2D-эскизы в полноценные 3D-объекты всего за один клик, используя возможности ИИ.
🔸 Рисуйте 2D-эскизы и мгновенно превращайте их в 3D-модели.
🔸 ИИ помогает оптимизировать и улучшать детали моделей.
🔸 Используйте текстовые подсказки для тонкой настройки и улучшения 3D-моделей.
🔸 Легко комбинируйте несколько моделей в 3D-пространстве для создания сцены.
🔸 Экспортируйте готовые модели в формат .glTF для дальнейшей работы в других приложениях.
Благодаря поддержке Docker и экспорту в .glTF, Vibe Draw идеально подходит для интеграции в ваши рабочие процессы. Удобно, быстро и эффективно
GitHub
Vibe Draw — это интуитивно понятная программа для создания 3D-моделей, которая превращает ваши 2D-эскизы в полноценные 3D-объекты всего за один клик, используя возможности ИИ.
🔸 Рисуйте 2D-эскизы и мгновенно превращайте их в 3D-модели.
🔸 ИИ помогает оптимизировать и улучшать детали моделей.
🔸 Используйте текстовые подсказки для тонкой настройки и улучшения 3D-моделей.
🔸 Легко комбинируйте несколько моделей в 3D-пространстве для создания сцены.
🔸 Экспортируйте готовые модели в формат .glTF для дальнейшей работы в других приложениях.
Благодаря поддержке Docker и экспорту в .glTF, Vibe Draw идеально подходит для интеграции в ваши рабочие процессы. Удобно, быстро и эффективно
GitHub
🤔 Что такое стоимость владения (и почему это важно)?
Простыми словами, стоимость владения проектом (или TCO — total cost of ownership) — это сколько денег и ресурсов нужно, чтобы твой продукт не только жил, но и был полезен бизнесу.
И тут есть подвох: когда стоимость владения высокая, бизнес страдает, потому что деньги улетают в поддержку, баги, переписывание и разгребание хаоса вместо развития и новых фич. А если страдает бизнес, то страдаешь и ты, потому что вместо крутых задач приходится чинить старое легаси.
🔍 Что повышает стоимость проекта и почему это плохо для всех?
👉 Нечитаемый и грязный код
Это классика. Когда никто не понимает, что происходит в коде, каждая фича делается в разы дольше, а баги становятся кошмаром. В итоге бизнес получает фичи поздно, теряет клиентов и деньги.
👉 Слишком сложная архитектура (привет, переусложнённые микросервисы!)
Слишком много сервисов, сложные связи, запутанные процессы. Команда тратит время на выяснение отношений вместо написания кода. Менеджмент ждёт, бизнес теряет деньги.
👉 Отсутствие автоматизации
Если тесты, деплой и мониторинг делаются вручную, разработчики заняты рутинной работой, а не реальными задачами. Падает производительность, вырастает число ошибок — бизнес снова теряет.
👉 Большие технические долги и отказ от рефакторинга
Кажется, быстрее «залатать и забыть». На практике эти костыли превращаются в мины замедленного действия, которые потом больно взрываются на проде.
🛠️ Что разработчик может делать прямо сейчас, чтобы снизить стоимость владения?
✅ Регулярно рефакторить код
Держи код чистым. Рефакторинг — не роскошь, а необходимость. Чем чище код, тем быстрее идут задачи.
✅ Автоматизируй всё, что можно автоматизировать (без перебора)
Юнит-тесты, CI/CD, мониторинг, алерты — автоматизация высвобождает время для важных задач и снижает шанс ошибок на проде. Забудь о ручном деплое и тестировании. CI/CD pipeline, автоматизированные тесты и алерты экономят кучу времени и нервов.
✅ Выбирай осознанно архитектуру
Не прыгай сразу в микросервисы, если этого не требует задача. Выбирай решения, исходя из потребностей бизнеса и простоты поддержки, а не только из-за трендов.
✅ Документируй осознанно
Пиши кратко, чётко и по делу. Документация должна помогать команде быстро включиться в проект, а не создавать дополнительный хаос.
💡 Вывод:
Высокая стоимость владения проектом ударяет не только по карману бизнеса, но и по твоим собственным задачам. Чем выше TCO, тем меньше у команды времени на что-то новое и интересное. Уменьшая технический долг и автоматизируя процессы, ты не только помогаешь компании зарабатывать, но и делаешь жизнь проще лично себе и своей команде.
🔥 А вот как это донести до бизнеса и менеджеров - тема отдельного поста. Поделитесь идеями, потому что это, обычно, одна из самых сложных проблем.
Реклама. Лукьянов П.А. ИНН 780159889217. erid: 2W5zFGXczQG
Простыми словами, стоимость владения проектом (или TCO — total cost of ownership) — это сколько денег и ресурсов нужно, чтобы твой продукт не только жил, но и был полезен бизнесу.
И тут есть подвох: когда стоимость владения высокая, бизнес страдает, потому что деньги улетают в поддержку, баги, переписывание и разгребание хаоса вместо развития и новых фич. А если страдает бизнес, то страдаешь и ты, потому что вместо крутых задач приходится чинить старое легаси.
🔍 Что повышает стоимость проекта и почему это плохо для всех?
👉 Нечитаемый и грязный код
Это классика. Когда никто не понимает, что происходит в коде, каждая фича делается в разы дольше, а баги становятся кошмаром. В итоге бизнес получает фичи поздно, теряет клиентов и деньги.
👉 Слишком сложная архитектура (привет, переусложнённые микросервисы!)
Слишком много сервисов, сложные связи, запутанные процессы. Команда тратит время на выяснение отношений вместо написания кода. Менеджмент ждёт, бизнес теряет деньги.
👉 Отсутствие автоматизации
Если тесты, деплой и мониторинг делаются вручную, разработчики заняты рутинной работой, а не реальными задачами. Падает производительность, вырастает число ошибок — бизнес снова теряет.
👉 Большие технические долги и отказ от рефакторинга
Кажется, быстрее «залатать и забыть». На практике эти костыли превращаются в мины замедленного действия, которые потом больно взрываются на проде.
🛠️ Что разработчик может делать прямо сейчас, чтобы снизить стоимость владения?
✅ Регулярно рефакторить код
Держи код чистым. Рефакторинг — не роскошь, а необходимость. Чем чище код, тем быстрее идут задачи.
✅ Автоматизируй всё, что можно автоматизировать (без перебора)
Юнит-тесты, CI/CD, мониторинг, алерты — автоматизация высвобождает время для важных задач и снижает шанс ошибок на проде. Забудь о ручном деплое и тестировании. CI/CD pipeline, автоматизированные тесты и алерты экономят кучу времени и нервов.
✅ Выбирай осознанно архитектуру
Не прыгай сразу в микросервисы, если этого не требует задача. Выбирай решения, исходя из потребностей бизнеса и простоты поддержки, а не только из-за трендов.
✅ Документируй осознанно
Пиши кратко, чётко и по делу. Документация должна помогать команде быстро включиться в проект, а не создавать дополнительный хаос.
💡 Вывод:
Высокая стоимость владения проектом ударяет не только по карману бизнеса, но и по твоим собственным задачам. Чем выше TCO, тем меньше у команды времени на что-то новое и интересное. Уменьшая технический долг и автоматизируя процессы, ты не только помогаешь компании зарабатывать, но и делаешь жизнь проще лично себе и своей команде.
🔥 А вот как это донести до бизнеса и менеджеров - тема отдельного поста. Поделитесь идеями, потому что это, обычно, одна из самых сложных проблем.
Реклама. Лукьянов П.А. ИНН 780159889217. erid: 2W5zFGXczQG
Использование `dataclasses` для автоматизации создания классов
Python 3.7 и выше предлагает удобный способ для создания классов с помощью модуля
Пример:
🔥 Бонус:
Python 3.7 и выше предлагает удобный способ для создания классов с помощью модуля
dataclasses. Этот инструмент позволяет вам быстро создавать классы, автоматически генерируя методы __init__, __repr__, __eq__, и другие. Сэкономьте время и код!Пример:
from dataclasses import dataclass
@dataclass
class Product:
name: str
price: float
quantity: int
product = Product('Apple', 1.5, 10)
print(product) # Product(name='Apple', price=1.5, quantity=10)
🔥 Бонус:
dataclasses упрощают работу с неизменяемыми объектами и позволяют использовать frozen=True, чтобы сделать объект неизменяемым после создания:@dataclass(frozen=True)
class ImmutableProduct:
name: str
price: float
# product.name = 'Orange' # Это вызовет ошибку!
Как использовать `contextlib` для работы с контекстными менеджерами
Работа с файлами или базами данных часто требует корректного управления ресурсами. В Python это удобно делать с помощью контекстных менеджеров. Модуль
Пример:
💡 Совет: Вместо использования
Работа с файлами или базами данных часто требует корректного управления ресурсами. В Python это удобно делать с помощью контекстных менеджеров. Модуль
contextlib упрощает создание таких менеджеров без необходимости писать громоздкий код.Пример:
from contextlib import contextmanager
@contextmanager
def my_open_file(filename, mode):
try:
file = open(filename, mode)
yield file
finally:
file.close()
with my_open_file('test.txt', 'w') as f:
f.write('Hello, world!')
💡 Совет: Вместо использования
try/finally, contextlib позволяет красиво и без лишних усилий управлять ресурсами.Оператор
Важно помнить, что
is в Python используется для проверки, ссылаются ли два операнда на один и тот же объект в памяти, то есть, являются ли они фактически одним и тем же объектом.Важно помнить, что
is проверяет не равенство значений, а именно идентичность объектов в памяти. Для проверки значений обычно используется оператор ==Использование генераторов для обработки больших данных
Если вам нужно обработать большой объём данных, но не хотите загружать всё в память, используйте генераторы. Они позволяют работать с данными по одному элементу за раз, экономя память.
Пример:
💡 Почему это полезно: генераторы могут работать с огромными данными, не загружая их полностью в память, что особенно важно для обработки больших файлов или потоков данных.
Если вам нужно обработать большой объём данных, но не хотите загружать всё в память, используйте генераторы. Они позволяют работать с данными по одному элементу за раз, экономя память.
Пример:
def my_generator():
for i in range(1000000):
yield i
gen = my_generator()
# Выводим первые 5 чисел
for _ in range(5):
print(next(gen))
💡 Почему это полезно: генераторы могут работать с огромными данными, не загружая их полностью в память, что особенно важно для обработки больших файлов или потоков данных.
В чём разница между типами list и tuple?
В Python, список (list) и кортеж (tuple) являются двумя различными типами данных, которые предоставляют набор элементов в определенном порядке. Основная разница между ними заключается в том, что список может быть изменен (мутабельный тип), а кортеж является неизменяемым (иммутабельным типом).
То есть, после создания кортежа, вы не можете изменять его содержимое, добавлять или удалять элементы. Это делает кортежи более эффективными по памяти и дает гарантию того, что их содержимое не будет изменено случайно в коде. В то время как список может быть изменен, что было бы очень полезно, если вам нужна коллекция элементов, которые вы можете изменять по ходу выполнения кода.
В Python, список (list) и кортеж (tuple) являются двумя различными типами данных, которые предоставляют набор элементов в определенном порядке. Основная разница между ними заключается в том, что список может быть изменен (мутабельный тип), а кортеж является неизменяемым (иммутабельным типом).
То есть, после создания кортежа, вы не можете изменять его содержимое, добавлять или удалять элементы. Это делает кортежи более эффективными по памяти и дает гарантию того, что их содержимое не будет изменено случайно в коде. В то время как список может быть изменен, что было бы очень полезно, если вам нужна коллекция элементов, которые вы можете изменять по ходу выполнения кода.
👍1
Лямбда-функции для краткости кода
Если вам нужно быстро создать небольшую функцию, которую вы используете один или два раза, лямбда-функции — идеальный выбор! Они делают код компактным и читаемым.
Пример:
🔥 Использование с функциями высшего порядка:
Лямбда-функции идеально подходят для коротких операций внутри функций, таких как
Если вам нужно быстро создать небольшую функцию, которую вы используете один или два раза, лямбда-функции — идеальный выбор! Они делают код компактным и читаемым.
Пример:
# Обычная функция
def square(x):
return x ** 2
# Лямбда-функция
square_lambda = lambda x: x ** 2
print(square(4)) # 16
print(square_lambda(4)) # 16
🔥 Использование с функциями высшего порядка:
numbers = [1, 2, 3, 4, 5]
# Применяем лямбда-функцию через map
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers) # [1, 4, 9, 16, 25]
Лямбда-функции идеально подходят для коротких операций внутри функций, таких как
map(), filter(), и reduce().👍3
Функция
По умолчанию Python может обрабатывать очень большие числа, что иногда приводит к проблемам, особенно если в программу поступают несанкционированные или вредоносные данные. Функция
sys.set_int_max_str_digits() в Python используется для ограничения количества цифр, которые могут быть преобразованы в тип данных int из строки. Это важно для предотвращения атак типа *Denial of Service* (DoS), когда с помощью очень длинных строк, представляющих огромные числа, можно истощить ресурсы системы и вызвать замедление работы программы.По умолчанию Python может обрабатывать очень большие числа, что иногда приводит к проблемам, особенно если в программу поступают несанкционированные или вредоносные данные. Функция
sys.set_int_max_str_digits() позволяет ограничить количество цифр, которые можно передать для преобразования в int, тем самым защищая систему от чрезмерных вычислений и угроз безопасности.👍3
🖥 Вот 17 топовых GitHub-репозиториев для изучения Python с ссылками:
1. 30-Days-Of-Python — 30-дневный челлендж по основам Python.
2. Python Basics — азы Python для новичков, просто и с примерами.
3. Learn Python — справочник с кодом, пояснениями и практикой.
4. Python Guide — гайд по практикам, инструментам и сложным темам.
5. Learn Python 3 — руководство по Python 3 с практикой для начинающих.
6. Python Programming Exercises — 100+ задач по Python.
7. Coding Problems — алгоритмы и структуры данных для собесов.
8. Project-Based-Learning — Python через реальные проекты.
9. Projects — идеи проектов для прокачки навыков.
10. 100-Days-Of-ML-Code — ML на Python шаг за шагом.
11. TheAlgorithms/Python — алгоритмы и структуры данных на Python.
12. Amazing-Python-Scripts — полезные скрипты: от утилит до автоматизации.
13. Geekcomputers/Python — скрипты для сети, файлов и задач.
14. Materials — код и проекты от Real Python.
15. Awesome Python — топ фреймворков, библиотек и ресурсов.
16. 30-Seconds-of-Python — короткие сниппеты для быстрых решений.
17. Python Reference — скрипты, туториалы и лайфхаки.
1. 30-Days-Of-Python — 30-дневный челлендж по основам Python.
2. Python Basics — азы Python для новичков, просто и с примерами.
3. Learn Python — справочник с кодом, пояснениями и практикой.
4. Python Guide — гайд по практикам, инструментам и сложным темам.
5. Learn Python 3 — руководство по Python 3 с практикой для начинающих.
6. Python Programming Exercises — 100+ задач по Python.
7. Coding Problems — алгоритмы и структуры данных для собесов.
8. Project-Based-Learning — Python через реальные проекты.
9. Projects — идеи проектов для прокачки навыков.
10. 100-Days-Of-ML-Code — ML на Python шаг за шагом.
11. TheAlgorithms/Python — алгоритмы и структуры данных на Python.
12. Amazing-Python-Scripts — полезные скрипты: от утилит до автоматизации.
13. Geekcomputers/Python — скрипты для сети, файлов и задач.
14. Materials — код и проекты от Real Python.
15. Awesome Python — топ фреймворков, библиотек и ресурсов.
16. 30-Seconds-of-Python — короткие сниппеты для быстрых решений.
17. Python Reference — скрипты, туториалы и лайфхаки.
GitHub
GitHub - Asabeneh/30-Days-Of-Python: The 30 Days of Python programming challenge is a step-by-step guide to learn the Python programming…
The 30 Days of Python programming challenge is a step-by-step guide to learn the Python programming language in 30 days. This challenge may take more than 100 days. Follow your own pace. These vide...
🔥1
Немного базовых знаний, без которых никуда!
В Python все типы данных делятся на две большие группы: изменяемые (
Зачем вообще это разделение? Всё просто: неизменяемые объекты защищают свои данные — никакой другой объект не может их "тихо подправить". Это делает работу с ними безопаснее и предсказуемее.
> 🧠 Интересно: tuple считается неизменяемым, но внутри него могут быть изменяемые объекты. Аккуратнее с этим!
В Python все типы данных делятся на две большие группы: изменяемые (
list, set, dict) и неизменяемые (int, float, str, tuple, bool, frozenset, complex).Зачем вообще это разделение? Всё просто: неизменяемые объекты защищают свои данные — никакой другой объект не может их "тихо подправить". Это делает работу с ними безопаснее и предсказуемее.
> 🧠 Интересно: tuple считается неизменяемым, но внутри него могут быть изменяемые объекты. Аккуратнее с этим!
👍3
Когда ты вызываешь
1. Создаётся объект класса
2. Функция
3. Объект тут же уничтожается, потому что больше нигде не используется.
А теперь фокус: при следующем вызове
Кажется, будто объект остался, но это просто Python оптимизирует работу с памятью.
id(Ok()), происходит магия: 1. Создаётся объект класса
Ok. 2. Функция
id() возвращает его адрес в памяти. 3. Объект тут же уничтожается, потому что больше нигде не используется.
А теперь фокус: при следующем вызове
id(Ok()) — Python создаёт новый, но точно такой же объект, и... размещает его на том же месте в памяти. Поэтому id() снова возвращает тот же адрес.Кажется, будто объект остался, но это просто Python оптимизирует работу с памятью.
reversed(x) — это итератор, который позволяет пройтись по объекту в обратном порядке. В нашем случае — это 3, 2, 1. Но так как это итератор, пройтись по нему можно только один раз.
При следующем вызове он ничего не вернёт, и результат сравнения
При следующем вызове он ничего не вернёт, и результат сравнения
sorted([3, 2, 1]) == sorted([]) даст False.Про метод str.split(sep)
Тогда ряды пробелов рассматриваются как один разделитель и, к тому же, в результате не будет пустых строк в начале и в конце.
Если sep передан, то разделители не группируются, а значит на месте повторов образуется
Все знают, что он разделяет строку по sep, но у него есть свои особенности. И первое, это если sep не указан, то есть None.Тогда ряды пробелов рассматриваются как один разделитель и, к тому же, в результате не будет пустых строк в начале и в конце.
Если sep передан, то разделители не группируются, а значит на месте повторов образуется
''. Также, разделение пустой строки всегда вернёт [''].❤2
Упрощаем поиск багов с помощью assert в Python
Функция для вычисления площади квадрата со стороной 5 должна вернуть 25. А что если нет? Самый быстрый способ проверить — использовать
Если условие в первом аргументе False, будет вызвано
Чтобы отключить проверку, используйте флаг
Функция для вычисления площади квадрата со стороной 5 должна вернуть 25. А что если нет? Самый быстрый способ проверить — использовать
assert.Если условие в первом аргументе False, будет вызвано
AssertionError, а второй аргумент (если он есть) выведет сообщение.Чтобы отключить проверку, используйте флаг
-O при запуске: python3 -O foo.py. Подробнее в документации https://docs.python.org/3/reference/simple_stmts.html#grammar-token-python-grammar-assert_stmt👍2
Правильная сортировка символов по алфавиту
Буквы сортируются не по алфавиту, а по их позиции в таблице UTF-16. Значение символа можно получить с помощью
Символы в верхнем регистре имеют меньший код, чем в нижнем, поэтому они оказываются в начале списка при сортировке.
Буквы сортируются не по алфавиту, а по их позиции в таблице UTF-16. Значение символа можно получить с помощью
ord(x).Символы в верхнем регистре имеют меньший код, чем в нижнем, поэтому они оказываются в начале списка при сортировке.
👍4
Создаём интерфейс командной строки
Если создаёте консольное приложение, важно, чтобы пользователи могли легко с ним работать. Для этого на помощь приходит
Установка:
Модуль использует ООП-стиль, что упрощает интеграцию в ваш проект.
Кроме того, он позволяет работать с атрибутами, переданными в него. Подробнее об этом и многом другом в документации
Если создаёте консольное приложение, важно, чтобы пользователи могли легко с ним работать. Для этого на помощь приходит
fire.Установка:
pip install fireМодуль использует ООП-стиль, что упрощает интеграцию в ваш проект.
Кроме того, он позволяет работать с атрибутами, переданными в него. Подробнее об этом и многом другом в документации
Работа с декораторами в Python
Декораторы — это мощный инструмент для изменения поведения функций или методов. С помощью декораторов можно добавлять функциональность, не изменяя сам код функции.
Пример:
С помощью
Декораторы — это мощный инструмент для изменения поведения функций или методов. С помощью декораторов можно добавлять функциональность, не изменяя сам код функции.
Пример:
def my_decorator(func):
def wrapper():
print("До выполнения функции")
func()
print("После выполнения функции")
return wrapper
@my_decorator
def hello():
print("Привет!")
hello()
С помощью
@my_decorator мы оборачиваем функцию hello, добавляя код до и после её вызова.👍4👎1