Pythoner
7.22K subscribers
860 photos
27 videos
4 files
654 links
Полезные материалы по Python, которые будут интересны опытному и начинающему разработчику.

Сотрудничество - @flattys
Цены - @serpent_media

Канал на бирже: https://telega.in/c/pythonercode
Download Telegram
Питонисты, общий сбор на Selectel Python MeetUp 🐍

📍 30 октября, 18:00, Санкт-Петербург или онлайн


Встретимся с топовыми спикерами из Selectel, Яндекса и Райффайзен Банка. Протестируем экосистему mypy на разных версиях Python, обсудим хаос-тесты и cron/systemd timers. В конце вас ждет афтепати с пиццей и нетворкинг с тимлидами.

А теперь конкретнее — на митапе вы узнаете:
✔️ как использовать экосистему mypy в инфраструктуре с 400+ микросервисов,
✔️ как запускать задачи по расписанию от cron/systemd timers до чистого Python,
✔️ насколько сильно можно нагрузить систему, прежде чем она сломается.

Мероприятие абсолютно бесплатное. Приходите в офис Selectel или подключайтесь онлайн. Регистрируйтесь по ссылке.

P.S. Отправляйте коллеге-питонисту и приходите на митап вместе 😎

Реклама. АО "Селектел". erid:2W5zFFwSz9e
4
✈️Новички часто удивляются, когда данные "меняются сами по себе". Причина — путаница между изменяемыми и неизменяемыми типами.

➡️Неизменяемые типы (immutable):
int, float, str, tuple, bool, frozenset
a = "hi"
b = a
a = "bye"
print(b) # hi

🔫b осталась "hi", потому что строки неизменяемы. a = "bye" создала новый объект.

➡️Изменяемые типы (mutable):
list, dict, set, bytearray, user-defined объекты
a = [1, 2, 3]
b = a
a.append(4)
print(b) # [1, 2, 3, 4]

🔫b тоже изменилась, потому что список — изменяемый. b = a — это ссылка на тот же объект.

➡️Что это значит на практике?
- Можно "безопасно" копировать неизменяемые значения
- С изменяемыми — нужно использовать .copy() или copy.deepcopy(), если не хочешь менять оригинал

➡️Пример с функцией:
def add_item(lst):
lst.append(99)

my_list = [1, 2]
add_item(my_list)
print(my_list) # [1, 2, 99]

🔫Список изменился! Потому что передали ссылку, а не копию.

💡Заключение
Неизменяемые типы создают копии при присваивании, изменяемые — передают ссылку.Всегда думай, что именно ты копируешь: значение или объект.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🔥1
✈️Функция any() используется для проверки наличия хотя бы одного True элемента в итерируемом объекте.

➡️Пример использования функции any(). Функция any() принимает итерируемый объект в качестве аргумента и возвращает True, если хотя бы один из элементов итерируемого объекта равен True. Давайте рассмотрим пример:
numbers = [0, 1, 2, 3, 4]
result = any(numbers)
print(result) # Output: True

⬆️В этом примере мы создали список чисел и передали его в функцию any(). Функция any() вернула True, потому что в списке есть хотя бы один элемент, равный True.

numbers = [0, 0, 0, 0, 0]
result = any(numbers)
print(result) # Output: False

⬆️В этом примере выводом будет False, так как все элементы - это 0.

0 — False
n < 0 или n > 0 или type(n) == str — True


🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🔥2
✈️Функция all() проверяет, что все элементы итерируемого объекта приводятся к True. Это удобно для краткой проверки, выполняются ли все условия без написания явных циклов.

➡️Пример:
values = [1, True, "hello", 5]
result = all(values)
print(result) # True

🔫В этом примере all() вернёт True, потому что все элементы не являются ложными значениями (0, False, None, '' и т.п.).

💡all() удобно использовать при валидации форм, проверке флагов, условий, или когда нужно убедиться, что все элементы в коллекции удовлетворяют какому-либо критерию. Это делает код лаконичнее и понятнее.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🔥1
🖼Библиотека PIL (Python Imaging Library) является одной из самых популярных библиотек для обработки изображений.

➡️Создание и редактирование изображений

Одной из главных возможностей библиотеки PIL является возможность создания и редактирования изображений. С ее помощью можно создавать новые изображения с определенными размерами и цветовыми схемами, а также редактировать существующие изображения. Например, можно добавлять текст, рисовать графические примитивы, наносить различные эффекты и многое другое.

➡️Обработка изображений в пакетном режиме

Библиотека PIL также предоставляет возможность обработки изображений в пакетном режиме. Это означает, что можно применять определенные операции к нескольким изображениям одновременно. Например, можно изменить размер и применить фильтр ко множеству изображений, что сэкономит время и упростит процесс обработки большого количества изображений.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41🔥1
✈️В Python объекты делятся на изменяемые (mutable) и неизменяемые (immutable). Это ключевая концепция, которая влияет на работу с переменными, аргументами функций и коллекциями.

➡️Пример:
def add_item(lst):
lst.append(100)

my_list = [1, 2, 3]
add_item(my_list)
print(my_list) # [1, 2, 3, 100]


➡️Списки — это изменяемый тип. Функция изменила оригинальный объект, переданный как аргумент. Если бы мы использовали кортеж (immutable), такое поведение вызвало бы ошибку.

Изменяемые типы: list, dict, set, bytearray
Неизменяемые: int, float, str, tuple, frozenset

💡Понимание этой разницы важно при:

• работе с функциями (аргументы по ссылке),
• проектировании безопасных API,
• использовании словарей и множеств (ключи должны быть immutable).

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥32
➡️Иногда элементы массива изначально неизвестны, но массив для их хранения необходим сейчас. Поэтому в NumPy есть функции для создания массива с исходным содержимым (по умолчанию тип массива — float64)

➡️ zeros((n, m)) - создает массив нулей с размером n x m.
>>> np.zeros((3, 2))
array([[0., 0.],
[0., 0.],
[0., 0.]])


➡️ ones((n, m)) - создает массив единиц с размером n x m.
>>> np.ones((2, 3))
array([[1., 1., 1.],
[1., 1., 1.]])

>>> np.ones((2, 2), dtype=np.int16)
array([[1, 1],
[1, 1]], dtype=int16)


➡️empty() - создает массив без заполнения. Исходное содержимое случайно и зависит от состояния памяти на момент создания массива (мусор, что в ней хранится).
>>> np.empty((2,2))
array([[5.e-324, 0.e+000],
[0.e+000, 5.e-324]])


🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥21🤔1
✈️Когда работаешь с Git, важно не засорять репозиторий временными и локальными файлами. Для Python это особенно актуально.

➡️Вот минимальный набор, который должен быть в .gitignore:
# Кэш компиляции Python
__pycache__/
*.py[cod]

# Виртуальное окружение
venv/
env/

# Файлы зависимостей и IDE
*.log
*.sqlite3
*.env
*.DS_Store

# VS Code / PyCharm и прочее
.vscode/
.idea/

# Файлы зависимостей
pip-wheel-metadata/
*.egg-info/
dist/
build/


💡Зачем это всё?
— Не лить в гит лишнее
— Исключить локальные настройки и окружение
— Сохранить проект чистым и переносимым

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🔥3
👍2
Что выдаст код выше
Anonymous Quiz
15%
True True
11%
False False
32%
True False
11%
False True
31%
Error
🤔4🤨2🤓1
🤔Разбор

В Python при приведении к bool любая непустая строка(даже если это пробелы) оценивается как True, а комплексный ноль - False


🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3👾2🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
✈️Вместо copy.deepcopy() можно эффективно копировать dataclass с изменением полей.

➡️Пример:
from dataclasses import dataclass, replace

@dataclass
class User:
name: str
age: int

user1 = User("Alice", 30)
user2 = replace(user1, age=35)

print(user2) # User(name='Alice', age=35)


💡Зачем это нужно?
- Можно изменять объект, не модифицируя оригинал.
- Работает быстрее, чем deepcopy().
- Удобно для immutable объектов.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥31