Python для начинающих
1.08K subscribers
304 photos
3 videos
232 files
62 links
Python для начинающих
Download Telegram
- Введение в библиотеку async для работы с асинхронностью
# Введение в библиотеку asyncio: Асинхронность в Python

Приветствую всех начинающих покорителей Python! Сегодня мы поговорим о магии асинхронного программирования, используя библиотеку asyncio. Вы наверняка слышали такие загадочные слова, как "асинхронность" и "конкурентность". Эти термины могут звучать пугающе, но на самом деле они скрывают за собой мощные инструменты для улучшения производительности ваших программ.

Итак, давайте начнем наше погружение в мир asyncio. Это стандартная библиотека Python, которая позволяет писать код, способный выполнять несколько операций одновременно, не создавая при этом множество потоков. Представьте себе повара на кухне, который параллельно нарезает овощи и варит суп — вот так примерно работает асинхронность!

## Основы работы с asyncio

Первое, что нужно знать, — это ключевые слова async и await. Они открывают двери в асинхронный мир. Давайте взглянем на простой пример:

import asyncio

async def cook_vegetables():
print("Starting to cut vegetables...")
await asyncio.sleep(2)
print("Vegetables are ready!")

async def boil_soup():
print("Boiling the soup...")
await asyncio.sleep(3)
print("Soup is ready!")

async def main():
await asyncio.gather(cook_vegetables(), boil_soup())

asyncio.run(main())


В этом примере функции cook_vegetables() и boil_soup() выполняются одновременно. Мы используем asyncio.sleep() как симуляцию задержки, думая о ней как о времени, необходимом для выполнения этих задач. asyncio.gather() позволяет запустить обе задачи и дождаться их завершения.

## Преимущества асинхронности

Теперь, когда вы видели базовый пример, давайте обсудим, почему асинхронность важна. Вообще, асинхронное программирование идеально подходит для задач, где нужно ждать — например, ожидание ответа от веб-сервера или базы данных. Вместо того чтобы блокировать основной поток ожиданием, вы можете выполнять другие полезные задачи.

## Применение asyncio

Представьте, что вы пишете чат-бота, который должен отвечать на вопросы пользователей, обрабатывать команды и, возможно, даже предсказывать погоду — все одновременно. С помощью asyncio бот сможет обрабатывать многие запросы одновременно, не заставляя пользователей ждать.

## Заключение

Асинхронное программирование на Python с библиотекой asyncio — это больше, чем просто модное слово. Это инструмент, который может значительно улучшить реактивность и распределение ресурсов в ваших приложениях. Освоение базовых концепций, таких как async и await, откроет для вас двери к созданию более эффективных и масштабируемых программ.
👍1🔥1
- Создание веб-форм и их обработка на Python
Создание веб-форм и их обработка на Python: просто и увлекательно

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

Итак, начнем с одного из самых популярных и удобных фреймворков для веб-разработки на Python - Flask. Этот фреймворк минималистичен и прост в изучении, но предоставляет все необходимые инструменты для создания мощных веб-приложений. Если вы еще не установили Flask, сделайте это с помощью команды:

pip install flask


Теперь давайте разберем, как создать простую форму, используя Flask. Вначале создадим основной файл нашего приложения и назовем его app.py:

from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
user_name = request.form['name']
return f'Привет, {user_name}!'
return render_template('index.html')

if __name__ == '__main__':
app.run(debug=True)


Этот код определяет маршрут '/', обрабатывающий как GET, так и POST запросы. Если на сервер поступает POST запрос, извлекается значение, введенное пользователем в поле формы, и выводится приветственное сообщение.

Теперь создадим шаблон HTML-файла index.html, который будет отображаться пользователю:

<!doctype html>
<html>
<head><title>Приветственное приложение</title></head>
<body>
<form method="POST">
<label for="name">Введите ваше имя:</label>
<input type="text" id="name" name="name">
<input type="submit" value="Отправить">
</form>
</body>
</html>


Все довольно просто: HTML форма с одним текстовым полем для ввода имени и кнопкой для отправки данных.

Теперь, когда вы запустите ваш Flask-сервер, перейдите в браузере по адресу http://127.0.0.1:5000/, вы увидите форму, готовую обрабатывать ваши данные.

Помимо стандартных методов Flask, Python предлагает множество библиотек для работы с формами и обработкой данных. Одним из таких решений является WTForms - библиотека, позволяющая создавать формы более гибким образом, поддерживающая валидацию данных и многое другое.

pip install flask-wtf


Flask-WTF значительно упрощает управление формами. Снова обновим наш app.py:

from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

class NameForm(FlaskForm):
name = StringField('Ваше имя', validators=[DataRequired()])
submit = SubmitField('Отправить')


Используя Flask-WTF, мы создаем класс NameForm, который определяет поле для ввода имени и кнопку отправки. Формы теперь обрабатываются сервером автоматически.

Таким образом, мы рассмотрели основные принципы и инструменты создания веб-форм на Python. Вместе с Flask и другими библиотеками он обладает мощными инструментами для работы с веб-приложениями, даже для таких начинающих разработчиков, как вы. Так что берите на вооружение знания и создавайте свои уникальные приложения!
🔥2👍1
- Взаимодействие с базами данных SQLAlchemy
Здравствуй, дорогой читатель моего блога! Сегодня мы окунемся в мир взаимодействия с базами данных при помощи одного из самых мощных инструментов в арсенале Python — SQLAlchemy. Как говорится, если вы хотите подружиться с базами данных, SQLAlchemy — ваш лучший приятель.

Итак, представьте себе следующий сценарий: вы создаете приложение, которому необходимо не только сохранять данные, но и делать это эффективно и с минимумом усилий. Можно, конечно, общаться с базой данных через сырые SQL-запросы, но зачем усложнять свою жизнь, если на помощь приходит ORM (Object Relational Mapping)? Именно так, SQLAlchemy позволяет связать объекты Python с таблицами базы данных и манипулировать данными, как будто это обычные объекты.

Начнем с простого примера, как подключиться к базе данных.

from sqlalchemy import create_engine

engine = create_engine('sqlite:///example.db', echo=True)


С помощью create_engine мы создаем движок, который управляет соединениями с базой данных. Здесь мы используем SQLite, но SQLAlchemy поддерживает множество других СУБД, таких как PostgreSQL, MySQL и другие.

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

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Book(Base):
__tablename__ = 'books'

id = Column(Integer, primary_key=True)
title = Column(String)
author = Column(String)


Здесь мы определили класс Book, который включает все необходимые столбцы таблицы: id, title и author. Каждый из них сопоставлен с определенным типом данных.

После того как модель готова, давайте создадим таблицу в нашей базе данных:

Base.metadata.create_all(engine)


Теперь, чтобы добавить данные, воспользуемся сессиями. В SQLAlchemy сессии позволяют выполнять операции с базой данных:

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)
session = Session()

new_book = Book(title='Python для начинающих', author='Иван Иванов')
session.add(new_book)
session.commit()


Создаем новую сессию, добавляем объект new_book и подтверждаем изменения, сохраняя книгу в базе данных. Все легко и просто!

Но что насчет запроса данных? SQLAlchemy также позволяет эффективно и элегантно находить необходимую информацию:

books = session.query(Book).filter_by(author='Иван Иванов').all()
for book in books:
print(book.title)


Вот так просто вы можете извлечь все книги, написанные автором Иван Иванов, и вывести их названия.

SQLAlchemy — это действительно мощный инструмент, который делает работу с базами данных в Python простой и, что самое главное, более понятной. Надеюсь, эта вводная часть вдохновит вас воспользоваться всеми преимуществами, которые предлагает этот фреймворк. До новых встреч на страницах моего блога!
👍51🔥1
- Введение в аналитическую обработку потоков данных
### Введение в аналитическую обработку потоков данных с Python

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

#### Начнем с простого: что такое поток данных?

Поток данных — это непрерывная последовательность данных, которую можно анализировать и обрабатывать в реальном времени. Благодаря такой модели появляется возможность моментально реагировать на события, будь то изменения на бирже, посты в социальных сетях или данные сенсоров в IoT.

#### Python на службе аналитики

К счастью, Python предлагает впечатляющий арсенал инструментов для работы с потоками. Один из них — библиотека streamz, созданная для удобного создания вычислительных графов и обработки данных на лету. Давайте взглянем на ее рабочий процесс.

##### Мини-пример с streamz

from streamz import Stream

def print_data(x):
print(f"Received data: {x}")

source = Stream()
source.map(str.upper).sink(print_data)

for data in ["python", "streamz", "data"]:
source.emit(data)


В этом примере мы создаем поток с использованием Stream и задаем ему простую задачу — переводить входящие строки в верхний регистр и выводить их на экран. Этот код демонстрирует, как легко начать с потоковой обработки данных.

#### Заглянем в будущее с помощью pandas

Другой мощный инструмент для работы с потоками — библиотека pandas. В 2020 году мир увидел новую перспективу с появлением dask, инструмента для распределенной обработки данных, который интегрируется с pandas для работы с большими потоками.

##### Пример с dask

import dask.dataframe as dd

# Создание фрейма данных с использованием Dask
df = dd.read_csv('data.csv')

# Пример простой обработки
result = df[df['value'] > 10].compute()

print(result.head())


Здесь с помощью dask мы можем работать с большими файлами CSV, не считывая их целиком в память, а выполняя вычисления только на необходимых частях.

Эти примеры — лишь верхушка айсберга в мире аналитической обработки потоков. Хотя Python может справляться с потоками данных в реальном времени, важно выбирать правильный инструмент для ваших задач, будь то графический анализ, оптимизация в режиме реального времени или просто фильтрация данных.

Попробуйте внедрить эти библиотеки в свои проекты и оцените потенциал Python в управлении безграничным потоком данных!
🔥2👍1
- Как правильно документировать ваш Python-код
### Как правильно документировать ваш Python-код

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

#### Почему документация важна?

Представьте, что вы вернулись к своему коду через год или, хуже того, вам достался чей-то чужой проект. Чтение неоправданно сложного кода без документации – не самое приятное занятие. Хорошая документация экономит время и нервы, улучшает качество кода и делает его доступным для других.

#### Докстринги — ваш первый инструмент

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

def say_hello(name):
"""
Эта функция принимает имя и выводит приветственное сообщение.
:param name: Имя человека, которого мы приветствуем
"""
print(f"Hello, {name}!")


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

#### Автоматизация: пусть машина работает за вас

После того как ваши функции и классы снабжены докстрингами, можно использовать инструменты для автоматической генерации документации. Такие решения, как Sphinx или pdoc, превращают ваш код в красивые и профессионально выглядящие HTML-страницы. Просто запустите утилиту, и магия произойдет!

#### Заботьтесь о будущем

Хорошо документированный код полезен не только для других, но и для вас самих. Вернувшись к своему проекту через время, вы легко поймете, что и как там работает. Постарайтесь не упустить ни одной функции без докстринга и не забывайте иногда обновлять документацию, если код изменяется.

#### Называйте вещи своими именами

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

Надеюсь, я смог убедить вас в важности документации. Старайтесь создавать код, который расскажет историю сам за себя, и ваше будущее "я" будет вам за это благодарно!
🔥2
- Управление версиями библиотек в Python с помощью poetry
Заголовок: Управление версиями библиотек в Python с poetry: просто, как песня

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

Встречаем poetry! Это инструмент, который совмещает в себе силу пакета pip и виртуального окружения, но подает это с гораздо более изысканным интерфейсом. Если апгрейд управления проектами Python мог бы быть музыкальным стилем, то poetry — это классический джаз, где каждая нота звучит на своем месте.

Почему именно poetry?

По какой причине вам стоит рассмотреть переход на poetry? Прежде всего, он берет на себя заботу о вашем pyproject.toml — файле, который хранит информацию о зависимостях вашего проекта. Все, что от вас требуется, — это добавить зависимости, а остальное poetry сделает за вас. Он использует простую команду poetry add, чтобы включить любую библиотеку в проект — и забудьте про ручное редактирование файлов.

Простота и кроссплатформенность

Поскольку мы живем в современном мире, где технологии должны работать на нас, а не наоборот, poetry поддерживается на всех популярных операционных системах. Вам не нужно беспокоиться о том, что ваш проект не заработает у коллеги на другой операционной системе.

Пример в действии

Давайте разберемся, как же poetry работает на практике. Представьте, вы решили включить библиотеку requests в свой проект.

poetry new myproject
cd myproject
poetry add requests


Вот и все! Poetry создала новый проект, подняла виртуальное окружение и добавила requests в список зависимостей. Вам больше не нужно беспокоиться о их версиях — poetry обеспечивает стабильность и актуальность вашего кода.

Версии под контролем

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

Это значит, что вы несетесь к успеху по гладкой дороге, вместо того чтобы объезжать все препятствия на пути. В любой момент можно обновить ваши зависимости до последних стабильных версий командой poetry update.

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

### Понятие безопасности кода

Безопасный код — это не просто код, который "работает", это код, который устойчив к атакам и манипуляциям. Основной принцип безопасности — никогда не доверяйте входным данным. Злоумышленники могут использовать эти данные для инъекций, обхода проверок и даже полного компрометации вашей системы.

### Пример 1: SQL-инъекции

Вы можете подумать: "Но я же программирую на Python, а не на SQL". Однако, если ваше приложение взаимодействует с базой данных, вам стоит обратить внимание на SQL-инъекции. Python предоставляет нам замечательный модуль sqlite3, который включает в себя возможности безопасной обработки запросов.

import sqlite3

def get_user_data(user_id):
# Никогда не делайте так:
# query = f"SELECT * FROM users WHERE id = {user_id}"
# cursor.execute(query)

# Вместо этого используйте параметризованные запросы
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
return cursor.fetchone()


Параметризованные запросы защищают от попыток исполнить произвольный SQL-код, обеспечивая вашу базу данных дополнительным уровнем безопасности.

### Пример 2: Безопасность при работе с веб-приложениями

При разработке веб-приложений особенно важно учитывать защиту от XSS-атак (межсайтовые скрипты). Один из способов обезопасить ваше приложение — использовать надежные библиотеки для шаблонов, такие как Jinja2, которые автоматически экранируют пользовательский ввод.

from jinja2 import Template

template = Template('Hello {{ user_input }}!')
output = template.render(user_input="<script>alert('hack');</script>")
print(output)
# Вывод: Hello &lt;script&gt;alert('hack');&lt;/script&gt;


Jinja2 экранирует потенциально опасные вставки, превращая HTML-код в безопасный текст.

### Пример 3: Управление зависимостями

Обновляйте свои зависимости регулярно. Устаревшие библиотеки могут содержать уязвимости, которые могут стать причиной утечки данных. Используйте инструменты типа pip-audit для проверки зависимостей.

pip install pip-audit
pip-audit


Этот инструмент поможет вам следить за актуальностью ваших библиотек и заранее уведомлять о возможных проблемах с безопасностью.

### Заключение

Безопасное программирование — это тот самый краеугольный камень, который может защитить ваш проект от множества проблем. Не забывайте об этих простых, но действенных методах, и вы сможете спать спокойно, зная, что ваш код защищен от большинства угроз. Python — ваш надежный союзник в этом нелегком деле.
👍3🔥2
- Как использовать cProfile для анализа производительности кода
Одним из самых увлекательных моментов в программировании является оптимизация кода. Ведь кто из нас, программистов, не мечтал о том, чтобы его приложение работало быстрее и эффективнее? Но как определить, где именно ваш код тормозит? На помощь приходит замечательный инструмент — cProfile, который поможет вам анализировать производительность кода на Python.

cProfile — это встроенный модуль Python, который позволяет профилировать ваш код, то есть измерять время, затраченное на выполнение отдельных функций. Инструмент весьма полезен, когда нужно определить узкие места в вашем приложении.

### Начало работы с cProfile

Начать работу с cProfile проще простого. Рассмотрим базовый пример:

import cProfile

def compute_square(limit):
return [i**2 for i in range(limit)]

cProfile.run('compute_square(10000)')


В этом примере мы написали функцию compute_square, которая вычисляет квадраты чисел в заданном диапазоне. Используя cProfile, мы можем увидеть, сколько времени уходит на выполнение этой функции.

### Интерпретация результата

После выполнения кода вы получите таблицу, содержащую информацию о количестве вызовов функций и времени их исполнения. Например:

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
1 0.001 0.001 0.005 0.005 <ipython-input-7>:3(compute_square)


Вот краткое описание столбцов:

- ncalls: сколько раз была вызвана функция.
- tottime: общее время, затраченное на функцию.
- percall: среднее время на один вызов функции.
- cumtime: совокупное время, включая вызовы подфункций.
- percall: среднее совокупное время на один вызов.

### Применение в реальной жизни

Пример из практики: допустим, вы разработчик веб-приложения на Flask, и ваше приложение иногда грузится дольше обычного. Вы можете интегрировать cProfile в код, чтобы проанализировать производительность:

from flask import Flask
import cProfile

app = Flask(__name__)

def heavy_operation():
sum([i**2 for i in range(10000)])

@app.route('/')
def index():
profile = cProfile.Profile()
profile.enable()
heavy_operation()
profile.disable()
profile.print_stats()
return "Done"

if __name__ == '__main__':
app.run()


Запустив приложение и зайдя на главную страницу, вы увидите отчет cProfile прямо в консоли.

### Заключение

Анализ производительности — это не только про ускорение работы вашего кода, но и про понимание его внутренней механики. Используя cProfile, вы не просто улучшаете свой код, но и становитесь на шаг ближе к тому, чтобы стать настоящим мастером оптимизации. Так что берите cProfile на вооружение и превращайте свой код в пример для подражания!
🔥3
- Создание телеграм-ботов с использованием библиотек python-telegram-bot
Создание телеграм-ботов с использованием библиотеки python-telegram-bot всегда ассоциируется с магией, но на самом деле это проще, чем кажется! Если вы начинающий и хотите сделать своего первого телеграм-бота, эта статья для вас.

Телеграм-боты быстро завоевали популярность благодаря своей универсальности и простоте использования. С их помощью можно автоматизировать множество задач: от сбора данных до отправки уведомлений пользователям. Библиотека python-telegram-bot предоставляет удобный интерфейс для взаимодействия с API Telegram, что делает процесс разработки бота лёгким и приятным.

Итак, начнем с установки библиотеки. Откройте терминал и выполните команду:

pip install python-telegram-bot


После установки давайте создадим простого бота, который будет отвечать на приветственные сообщения. Для этого необходимо зарегистрировать нового бота через BotFather в телеграме и получить токен доступа.

Теперь начинаем кодить! Первый шаг — импортируем нужные модули:

from telegram import Update
from telegram.ext import Updater, CommandHandler, CallbackContext


Создадим простую функцию, которая будет отвечать на команду /start:

def start(update: Update, context: CallbackContext) -> None:
update.message.reply_text('Привет! Я ваш первый телеграм-бот.')


Следующий шаг — создаем функцию main, где будем управлять нашим апдейтером и добавлять хендлеры:

def main() -> None:
updater = Updater("YOUR_TOKEN_HERE")

dispatcher = updater.dispatcher
dispatcher.add_handler(CommandHandler("start", start))

updater.start_polling()
updater.idle()


Замените "YOUR_TOKEN_HERE" на токен вашего бота. Запустив этот код, бот будет отвечать "Привет! Я ваш первый телеграм-бот." на команду /start.

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

Добавьте новый хендлер в функцию main:

def echo(update: Update, context: CallbackContext) -> None:
update.message.reply_text(update.message.text)

dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo))


Теперь ваш бот будет отвечать тем же текстом на любые другие сообщения.

Создание телеграм-ботов с python-telegram-bot — это увлекательный опыт, который позволяет не только познакомиться с API, но и реализовать множество полезных идей. Погрузитесь в процесс, и вы обнаружите, насколько это гибкий и мощный инструмент. Наслаждайтесь программированием!
👍2🔥1
- Изучение структуры данных обрабатываемого графа с NetworkX