Python для начинающих
1.12K subscribers
347 photos
3 videos
232 files
64 links
Python для начинающих
Download Telegram
- Как создать распределенное приложение с использованием ZeroMQ
Привет! Меня зовут Иван, и сегодня мы разберём, как создать распределённое приложение на Python с помощью ZeroMQ — одного из самых мощных инструментов для обмена сообщениями между процессами и машинами.

Что такое ZeroMQ?
Если коротко: это библиотека, которая позволяет писать приложение, способное «разговаривать» с другими частями системы через сеть или на одном компьютере, не заморачиваясь низкоуровневой реализацией протоколов и сокетов. Всё просто и надёжно.

Почему стоит попробовать ZeroMQ?
- Поддержка разных топологий: «точка-точка», паблиш/сабскрайб, очередь задач.
- Лёгкость внедрения — всё работает через обычные TCP/IPC-соединения, и не требует сервера-брокера.
- Производительность и масштабируемость.

Пример 1. Простое распределённое приложение: сервер-задачник и работник

server.py:

import zmq

context = zmq.Context()
socket = context.socket(zmq.PUSH)
socket.bind("tcp://127.0.0.1:5557")

for i in range(10):
msg = f"Task #{i}"
print(f"Send: {msg}")
socket.send_string(msg)


worker.py:

import zmq
import time

context = zmq.Context()
socket = context.socket(zmq.PULL)
socket.connect("tcp://127.0.0.1:5557")

while True:
msg = socket.recv_string()
print(f"Received: {msg}")
time.sleep(1)


Добавьте несколько worker.py — увидите, как задачи будут распределяться между ними. Так просто вы получите базовую очередь задач!

Пример 2. Публикация и подписка (Pub/Sub)

publisher.py:

import zmq
import time

context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://127.0.0.1:5556")

while True:
socket.send_string("news Hello subscribers!")
time.sleep(1)


subscriber.py:

import zmq

context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://127.0.0.1:5556")
socket.setsockopt_string(zmq.SUBSCRIBE, "news")

while True:
msg = socket.recv_string()
print(f"Got: {msg}")


Итоги
ZeroMQ — отличный способ познакомиться с реальным распределённым программированием. Он прост в изучении, эффективен и позволяет строить масштабируемые приложения практически без лишней сложности. Берите эти примеры за основу — и экспериментируйте!
👍1
- Работа с PEP8 и форматирование кода с помощью black
Привет! С вами Иван, и сегодня мы разберём тему, которой часто пренебрегают новички: качество оформления кода. Возможно, вы слышали о загадочном PEP8 и модуле black, но пока не решались познакомиться поближе? Тогда устраивайтесь поудобнее — сейчас разберём всё на пальцах.

## Что такое PEP8?

PEP8 — это официальный стиль написания кода на Python. Или, проще говоря, набор рекомендаций, как писать код понятно не только себе, но и другим. Вот некоторые ключевые моменты:

- отступы: только 4 пробела;
- длина строк: лучше укладываться в 79 символов;
- имена переменных: snake_case, никаких camelCase;
- между функциями — две пустых строки, между методами — одна.

Пример «неправильного» кода:

def addNumbers(a,b): return a+b


И вот так — по PEP8:

def add_numbers(a, b):
return a + b


Лаконично, читаемо — и глаз радуется.

## Форматируем код автоматически: знакомство с black

В мире, где приходится работать с десятками файлов, перебирать пробелы вручную — путь для мазохистов. Здесь на сцену выходит black — грозный (и очень полезный) автоформаттер кода.

### Установка

Black ставится одной командой:

pip install black


### Использование

Форматируем файлы или целые проекты:

black my_script.py


Black сам поправит отступы, длину строк, расставит пробелы. Причём форматирование очень строгое: порядка больше, споров меньше! Вот пример до и после:

def fibonacci(n): a, b = 0, 1; result = [] 
for _ in range(n): result.append(a); a, b = b, a+b
return result


после команды black:

def fibonacci(n):
a, b = 0, 1
result = []
for _ in range(n):
result.append(a)
a, b = b, a + b
return result


## Почему это важно?

Чистый код читается легче, поддерживается быстрее, и экономит время вашей команды. Придерживаясь PEP8 и используя инструменты вроде black, вы быстро привьёте себе привычку писать не только рабочий, но и красивый Python-код.

На сегодня всё, до встречи в новых постах!
👍3🔥1
- Основы работы с модулем asyncio для загрузки сетевых данных
Привет! На связи Иван, и сегодня разберём одну из самых интересных фишек современного Python — асинхронное программирование с помощью модуля asyncio. Если тебе надоело ждать, пока твой скрипт скачает десяток страниц одну за другой, значит, самое время освоить новый подход!

## Почему именно asyncio?

Обычные (синхронные) функции скачивают данные поочерёдно: началась загрузка — жди, пока закончится. А вот с asyncio мы можем делать несколько запросов одновременно, не блокируя выполнение программы! Это особенно круто, когда надо работать с большим количеством сетевых ресурсов.

## Первый шаг: Корутинa и event loop

Всё строится вокруг корутин (функций с async def) и главного цикла событий — event loop. Вот как можно скачать сразу несколько страниц (например, с помощью aiohttp):

import asyncio
import aiohttp

async def fetch_page(session, url):
async with session.get(url) as response:
return await response.text()

async def main():
urls = [
"https://example.com",
"https://httpbin.org/get",
"https://python.org"
]
async with aiohttp.ClientSession() as session:
tasks = [fetch_page(session, url) for url in urls]
results = await asyncio.gather(*tasks)
for i, html in enumerate(results):
print(f"Page {i+1} downloaded, length: {len(html)}")

asyncio.run(main())


## Разбираем пример:

- async def fetch_page — корутина, которая асинхронно скачивает страницу.
- session.get(url) внутри асинхронного контекста. Нет блокировки на сеть!
- asyncio.gather(*tasks) — запускает сразу несколько загрузок; программа ждёт, когда все завершатся.
- Результаты появляются, когда всё скачалось.

## Ещё парочка лайфхаков

1. IO-операции (HTTP-запросы, чтение файлов) лучше всего подходят для асинхронного подхода.
2. Используй aiohttp или другие async-библиотеки — работать с обычным requests тут нельзя.
3. Не забывай про async with — он гарантирует правильное закрытие соединения.

Вот так, всего пара строк — и твой Python-код работает в разы быстрее там, где раньше скучал, глядя на загрузку одного URL за другим! Попробуй — и почувствуй разницу.

До встречи, Иван.
👍1
- Использование библиотек для обработки естественной речи: nltk и spaCy
Привет! Сегодня погрузимся в магию работы с текстами на Python и разберём сразу два популярных инструмента для обработки естественного языка — NLTK и spaCy. Даже если вы только начали путь питониста, с этими библиотеками вы сможете анализировать тексты, искать ключевые слова, определять части речи и делать ещё массу интересного.

### NLTK — классика жанра

NLTK (Natural Language Toolkit) часто называют «швейцарским ножом» для языкового анализа. Несмотря на почтенный возраст, NLTK актуален благодаря богатейшему набору функций и огромному количеству встроенных корпусов (наборов текстов для анализа).

Разберём простой пример — разбор текста на предложения и слова:

import nltk
nltk.download('punkt')

text = "Python is great. Natural Language Processing is fascinating!"
sentences = nltk.sent_tokenize(text)
words = [nltk.word_tokenize(sentence) for sentence in sentences]
print(sentences)
print(words)


NLTK также умеет определять части речи:

nltk.download('averaged_perceptron_tagger')

tokens = nltk.word_tokenize("SpaCy is faster than NLTK in many tasks.")
pos_tags = nltk.pos_tag(tokens)
print(pos_tags)


### spaCy — быстрый и современный

Если вам нужен максимально быстрый и удобный инструмент — берите spaCy. Он из коробки умеет извлекать сущности, токенизировать текст, разбивать слова по частям речи и много чего ещё, причём делает это молниеносно.

Пример выделения именованных сущностей (людей, компаний, городов):

import spacy

nlp = spacy.load("en_core_web_sm")
doc = nlp("Apple is looking at buying U.K. startup for $1 billion")
for ent in doc.ents:
print(ent.text, ent.label_)


Ещё spaCy великолепно разбирается с лемматизацией (приведение слова к базовой форме):

for token in doc:
print(token.text, token.lemma_)


### Что выбрать?

NLTK — хороший выбор для обучения, экспериментов и когда нужен гибкий доступ к лингвистическим инструментам. spaCy — чемпион по скорости и простоте для реальных приложений. К тому же их можно комбинировать: например, токенизацию делать в spaCy, а сложную работу с корпусами доверить NLTK.

С текстами в Python можно творить чудеса, и знакомство с этими библиотеками — отличное начало. Удачной практики!
— Иван
👍1
- Работа с файловой системой: копирование, удаление и перемещение папок с shutil.
Привет, друзья! С вами Иван, и сегодня я расскажу о мощном модуле shutil, который позволяет управлять файлами и папками в Python буквально в пару строк. Готовы почувствовать себя повелителями файловой системы? Тогда поехали!

### Копирование папок и файлов

Если вы хотите скопировать файл — используйте shutil.copy, а вот для папок, в том числе с вложенными подкаталогами, пригодится shutil.copytree:

import shutil

# Копирование папки с содержимым
shutil.copytree('source_folder', 'destination_folder')


Стоит учитывать: destination_folder не должен существовать, иначе будет исключение.

А вот просто скопировать файл – элементарно:

shutil.copy('original.txt', 'copy.txt')


### Перемещение объектов

Иногда нужно не копировать, а переместить файл или целую папку – тут поможет shutil.move. Причём модуль сам определит, файл вы перемещаете или папку.

shutil.move('old_folder', 'new_folder_location/old_folder')


Путь назначения может быть и на другом диске! Всё работает и для Unix, и для Windows.

### Удаление папок

Удалять папки вручную – не вариант, если их много. В этом случае shutil.rmtree сотрёт весь каталог с файлами и подпапками:

shutil.rmtree('unnecessary_folder')


ВАЖНО: Эта команда не спрашивает подтверждения — всё удаляется навсегда, так что лучше дважды проверять путь, чтобы затем не восстанавливать данные слезами.

### Быстрый итого

- copy — копирует файлы.
- copytree — копирует папки (и их содержимое).
- move — перемещает любые объекты файловой системы.
- rmtree — безжалостно удаляет целые папки.

shutil — незаменимый инструмент для данных админ-скриптов, резервного копирования или просто наведения порядка у себя на диске с помощью Python. Простота и мощь – вот почему я обожаю этот модуль!

Увидимся в следующих постах, где разберём ещё больше секретных приемов из арсенала Python!
👍1
- Как запрограммировать простую очередь или стек с использованием deque из collections.
Привет! С вами Иван, и сегодня мы поговорим о том, как легко и просто реализовать структуру данных “очередь” и “стек” с помощью модуля collections, а точнее — с использованием класса deque. Если вдруг вы еще не знакомы с этим классом, самое время это исправить!

## Почему именно deque?

В Python списки (list) отлично подходят для многих задач, но если вы часто добавляете и убираете элементы с начала, производительность может заметно пострадать. К счастью, есть deque (double-ended queue)! Это двусторонняя очередь, которая реализована на основе связанного списка: вставка и удаление элементов с любого конца происходят за константное время.

## Реализуем очередь

Очередь — это структура данных, работающая по принципу FIFO (First-In, First-Out, “первым пришёл — первым ушёл”). Давайте посмотрим, как можно буквально в пару строк сделать простейшую очередь:

from collections import deque

queue = deque()

# Добавляем элементы в конец очереди
queue.append('apple')
queue.append('banana')
queue.append('cherry')

# Удаляем элемент из начала очереди
first = queue.popleft()
print(first) # apple


Здесь всё интуитивно ясно: append добавляет элемент в конец, а popleft вытаскивает первый элемент.

## А теперь стек

А вот стек — это LIFO (Last-In, First-Out, “последним пришёл — первым ушёл”). Реализуется он не менее просто:

from collections import deque

stack = deque()

# Добавляем элементы на вершину стека
stack.append('red')
stack.append('green')
stack.append('blue')

# Удаляем элемент с вершины стека
top = stack.pop()
print(top) # blue


Для стека используйте методы append и pop. Всё, больше ничего не нужно!

## Немного тонкостей

- deque можно использовать и как очередь, и как стек — просто используйте нужные методы: для очереди append и popleft, для стека — append и pop.
- Можно задавать максимальную длину очереди (maxlen), и тогда при переполнении старые элементы будут автоматически удаляться.
- deque поддерживает перебор циклом, а также методы, похожие на обычные списки: extend, remove, count и другие.

## Итого

Использовать стандартный модуль collections и класс deque — отличный способ писать лаконичный, быстрый и читаемый код для очередей и стеков. Основная прелесть — минимум кода и максимум эффективности, а всё самое “магическое” спрятано внутри самой стандартной библиотеки Python.

Экспериментируйте с deque — и почувствуйте разницу!
- Создание программы для учета расходов: работа с CSV и matplotlib.
Привет! Я — Иван, и сегодня мы напишем простую, но очень полезную программу: учёт расходов на Python. Вы удивитесь, как здорово совмещаются такие модули, как csv и matplotlib, чтобы автоматизировать ваши финансовые записи и даже видеть их на графике!

Первый шаг — научимся сохранять расходы в файле CSV. Это позволит работать с данными в удобном табличном виде.

import csv

def add_expense(category, amount):
with open('expenses.csv', 'a', newline='') as file:
writer = csv.writer(file)
writer.writerow([category, amount])

# Пример использования:
add_expense('Food', 520)
add_expense('Transport', 300)


Теперь, когда у нас есть таблица расходов, пора научиться их читать и анализировать. Допустим, мы хотим подбить итог по категориям и узнать, куда уходит основная часть бюджета.

def read_expenses():
expenses = {}
with open('expenses.csv', newline='') as file:
reader = csv.reader(file)
for row in reader:
category, amount = row
expenses[category] = expenses.get(category, 0) + float(amount)
return expenses

# Выведем сводку
expenses_summary = read_expenses()
for category, total in expenses_summary.items():
print(f"{category}: {total}")


А что если визуализировать эти данные? С этим справится всемогущий matplotlib. Построим круговую диаграмму расходов!

import matplotlib.pyplot as plt

def plot_expenses(expenses):
categories = list(expenses.keys())
amounts = list(expenses.values())
plt.pie(amounts, labels=categories, autopct='%1.1f%%')
plt.title('Expense Breakdown')
plt.show()

# Вызов функции для построения графика:
plot_expenses(expenses_summary)


Итак, на базе трёх коротких функций мы получаем персональный трекер расходов: сохраняем их, анализируем и наглядно видим, что съедает наш бюджет.

Советую поэкспериментировать: добавить даты, поиск по месяцам, экспорт в другие форматы. Python + CSV + matplotlib — это мощный, гибкий и, главное, простой старт для любого, кто хочет автоматизировать свою бытовую жизнь!