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

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

Канал на бирже: https://telega.in/c/pythonercode
Download Telegram
✈️UScrapper — это относительно новая библиотека Python, созданная для упрощения веб-скрапинга. Она предоставляет высокоуровневый интерфейс для извлечения данных с веб-страниц без необходимости писать много кода.

➡️UScrapper особенно полезен для начинающих разработчиков и для тех, кто хочет быстро получить структурированные данные без глубокого погружения в детали HTML, CSS-селекторов или XPath.

➡️Пример извлечение таблиц со страницы:
from uscrapper import extract_tables

url = "https://en.wikipedia.org/wiki/List_of_countries_by_population"
tables = extract_tables(url)

# Первые 5 строк первой таблицы
print(tables[0].head())


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

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍6🔥4
Если честно, меня бесят каналы, где непонятно кто учит программированию. На деле там копипаста с первой страницы гугла, которая грузит мозги.

Но есть и исключения. Например, канал @devsp. Его автор — ведущий разраб в области искусственного интеллекта. На минуточку, он приложил руку к самым нашумевшим нейронкам — Claude, Chat GPT и DeepSeek.

А теперь представьте, что мастодонт такого уровня ЛИЧНО делится внутрянкой своей работы и объясняет сложные концепции так, что поймёт даже отсталый двоечник.

Вещает про Data Science и машинное обучение с упором на практику (которой даже в платных курсах сильно не хватает).

Короче, если хотите быстро и без проблем расти в профессии — обязательно подпишитесь. Редко где найдешь такой баланс теории, подачи и практики: @devsp
4🤣2
✈️Global Interpreter Lock (GIL) — это механизм в CPython, который ограничивает выполнение Python-кода одним потоком за раз, даже на многопроцессорных системах.

➡️Зачем нужен GIL?
Он предотвращает проблемы с управлением памятью и упрощает работу интерпретатора. Однако из-за него многопоточные программы не могут эффективно использовать несколько ядер процессора.

➡️Когда GIL мешает?
- В CPU-интенсивных задачах (например, обработка данных, вычисления) многопоточность не дает прироста производительности.

- В I/O-интенсивных задачах (сетевые запросы, работа с файлами) GIL почти не влияет, так как потоки могут освобождать блокировку во время ожидания операций ввода-вывода.

💡Решение:
Если нужна настоящая параллельность, используйте многопроцессорность (multiprocessing), которая запускает отдельные процессы без GIL, или попробуйте альтернативные реализации Python, такие как Jython или PyPy.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍3🔥3
✈️В Python можно сразу присвоить значения нескольким переменным в одной строке. Это удобно и делает код короче.
x, y, z = 1, 2, 3
print(x, y, z) # 1 2 3


➡️Можно использовать для обмена значениями без временной переменной:
a, b = 5, 10
a, b = b, a
print(a, b) # 10 5


💡 Это стандартный приём в Python, который экономит строки и делает код читаемым.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍85🔥4
✈️Когда мы открываем Яндекс.Карты, Google Maps или сервис доставки еды — за кулисами всегда работает геокодинг.
Приложение должно понять:

- Где находится пользователь
- Как далеко курьер от адреса
- Какие ближайшие отели или кафе показать
Всё это можно сделать прямо из Python с помощью библиотеки Geopy.

➡️ Что умеет Geopy:
- Геокодинг — превращает адрес в координаты
(«Москва, Красная площадь» → 55.7539, 37.6208)
- Обратный геокодинг — по координатам даёт адрес
(55.7539, 37.6208 → «Красная площадь, Москва, Россия»)
- Расстояния — считает путь между точками (в км, милях, морских милях)
- Поддержка разных сервисов: OpenStreetMap (Nominatim), Google, Яндекс, Bing, ArcGIS и др.

➡️Примеры:
from geopy.geocoders import Nominatim
from geopy.distance import geodesic

# Инициализация геокодера
geo = Nominatim(user_agent="geo_app")

# 1️⃣ Адрес → координаты
moscow = geo.geocode("Москва, Красная площадь")
print("Москва:", moscow.latitude, moscow.longitude)

# 2️⃣ Координаты → адрес
place = geo.reverse("55.7539, 37.6208")
print("Адрес:", place.address)

# 3️⃣ Расстояние Москва–СПб
p1 = (moscow.latitude, moscow.longitude)
p2 = (59.9343, 30.3351) # Санкт-Петербург
print("Расстояние:", geodesic(p1, p2).km, "км")

🔫Результат:
Москва: 55.7539, 37.6208
Адрес: Красная площадь, Москва, Россия
Расстояние: ~634 км 🚄


➡️ Где пригодится Geopy:
- Логистика: рассчитывать маршруты доставки
- Аналитика: строить тепловые карты заказов
- Travel-сервисы: находить ближайшие отели или достопримечательности
- Стартапы: от «поиска ближайшей кофейни» до «глобального трекера велосипедов»

💡Заключение
Geopy делает Python ближе к реальному миру.
С его помощью можно писать приложения, которые не просто что-то считают, а реально «понимают» где находится человек, бизнес или объект.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍104🔥2
DevPyConf на Cтачке
Python-разработка│ 3 октября │ Санкт-Петербург

На DevPyConf соберутся ведущие Python разработчики, чтобы обсудить тренды, архитектуру и инструменты.

Ключевые треки конференции:
— Архитектура и python
— Современный ML, AI тулинг

Выступят спикеры:
Михаил Гурбанов, TechLead в Райффайзенбанке. Тема доклада: «Архитектура сервисов в AI ландшафте»
Евгений Блинов, Разработчик в Авито. Тема доклада: «Дружим sync и async питоны»
Юрий Маркин, Старший разработчик в X5 Tech. Тема доклада: «Pythorust не серебряная пуля»
Денис Воронкин, Backend разработчик в KTS. Тема доклада: «Почему надежно кешировать данные сложно?»
Александр Кучин, Python разработчик в Литрес. Тема доклада: «Мы уменьшили длительность нашего пайплайна в несколько раз - до 17 минут»
Алексей Фиссон, Тим лид в X5 Tech. Тема доклада: «Чем вам asyncio не фреймворк, а Redis не брокер?»
Сергей Волков, Team Lead в Сбере. Тема доклада: «Метрики без боли: AI-агент вместо BI-навигации»
Денис Аникин, Тимлид/Комьюнити лид в Райффайзенбанке. Тема доклада: «Выбираем LLM gateway»


Программа и билеты на сайте

Следите за новостями в Телеграме и ВК
2
✈️range() — встроенная функция для генерации чисел. Используется для перебора в цикле.
Синтаксис:
range(начало, конец, шаг)

По умолчанию: начало = 0, шаг = 1.

➡️Пример:
# Простой range от 0 до 2
for i in range(3):
print(i)

# Range с началом и шагом
for i in range(1, 10, 2):
print(i)

# Вывод:
# 0
# 1
# 2
# 1
# 3
# 5
# 7
# 9


🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🔥3
✈️Protocol из модуля typing позволяет определить интерфейс, который должен реализовывать класс. Это полезно для проверки соответствия объектов определённым методам и атрибутам, что делает код более гибким и понятным.

➡️Когда применять Protocol?
- Динамическая типизация: Если вы хотите задать контракт для классов без явного указания на наследование.

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

- Улучшение читаемости: Помогает лучше понять как должны взаимодействовать различные части кода.

➡️Пример использования Protocol:
from typing import Protocol

# Определяем протокол
class Movable(Protocol):
def move(self) -> None:
...

# Класс, реализующий этот протокол
class Car:
def move(self) -> None:
print("Car is moving")

class Bird:
def move(self) -> None:
print("Bird is flying")

def drive(vehicle: Movable) -> None:
vehicle.move()

# Используем
car = Car()
bird = Bird()

drive(car) # Output: Car is moving
drive(bird) # Output: Bird is flying


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

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍5🔥3
✈️Функция enumerate() позволяет перебрать элементы последовательности вместе с их индексами. Это удобно, когда нужен не только элемент, но и его позиция в коллекции.

➡️Пример:
fruits = ["apple", "banana", "orange"]

for index, fruit in enumerate(fruits, start=1):
print(index, fruit)

1 apple
2 banana
3 orange

🔫В этом примере enumerate() вернёт кортежи с индексом и значением.

💡Заключение
enumerate() удобно использовать вместо range(len()) для более чистого и читаемого кода при переборе списков, кортежей и других коллекций.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍4🔥3
✈️Что такое Pickle?
Pickle — это стандартная библиотека Python, которая позволяет сохранять (сериализовать) и восстанавливать (десериализовать) объекты Python в файлы. Это особенно полезно для долгосрочного хранения данных или передачи их между программами. С помощью pickle можно сохранить сложные структуры данных, такие как списки, словари, классы и даже функции.


➡️Пример использования Pickle. Сохранение данных в файл:
import pickle

# Исходные данные
data = {
"name": "Alice",
"age": 30,
"skills": ["Python", "Data Science", "Machine Learning"]
}

# Сохраняем данные в файл
with open('data.pkl', 'wb') as file:
pickle.dump(data, file)

print("Данные успешно сохранены!")

➡️Восстановление данных из файла:
import pickle

# Восстанавливаем данные из файла
with open('data.pkl', 'rb') as file:
loaded_data = pickle.load(file)

print("Восстановленные данные:")
print(loaded_data)

➡️Результат:
Восстановленные данные:
{'name': 'Alice', 'age': 30, 'skills': ['Python', 'Data Science', 'Machine Learning']}


🔎Почему Pickle полезен?
- Простота использования: Легко сохранять и восстанавливать сложные структуры данных.

- Гибкость: Поддерживает практически все типы данных Python.

- Быстродействие: Pickle работает быстрее, чем другие форматы, такие как JSON.

➡️Pickle — это мощный инструмент для сохранения и восстановления данных в Python. Он позволяет легко работать со сложными структурами данных и экономит время на повторной обработке информации.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍95🔥3
3🤔2
Что выдаст код выше
Anonymous Quiz
7%
[1, 9, 25]
10%
[2, 4]
80%
[4, 16]
3%
Error
👍4🤔2👌2
🤔Разбор

Список nums = [1, 2, 3, 4, 5]

В генераторе [x**2 for x in nums if x % 2 == 0]:
берём только те x, которые делятся на 2 (чётные)
это 2 и 4
возводим их в квадрат: 2**2 = 4, 4**2 = 16

Результат: [4, 16]


🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥85👍2
✈️Конструкция if name == "main" используется для того, чтобы запускать часть кода только при прямом выполнении файла, а не при его импорте как модуля. Это важно для разделения логики запуска и повторного использования кода.

➡️Пример:
def greet():
print("Hello!")

if name == "main":
greet()

🔫В этом примере функция greet() вызовется только если файл запущен напрямую, но не при импорте его в другой модуль.

💡if name == "main" удобно использовать для тестирования, запуска скриптов и избежания лишнего выполнения кода при импорте.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍85🔥4
✈️В Python for часто используется вместе с range() для повторения действий. range(start, stop, step) создаёт последовательность чисел. Если указать только одно число — это будет stop, а start считается равным 0.
# Выводит числа от 0 до 4
for i in range(5):
print(i)

# Выводит чётные числа от 2 до 10
for i in range(2, 11, 2):
print(i)


🔫Такой способ помогает легко перебирать индексы, повторять действия заданное число раз или строить простые циклы без списков.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍7🔥2🤣1
✈️В Python можно передавать аргументы по имени, а не только по позиции. Это улучшает читаемость и делает код более понятным.

➡️ Используются в функциях с несколькими параметрами, особенно если есть значения по умолчанию.
def greet(name, greeting="Привет"):
print(f"{greeting}, {name}!")

greet("Анна") # Привет, Анна!
greet(name="Иван", greeting="Здравствуйте") # Здравствуйте, Иван!


💡Такой стиль помогает избежать ошибок и делает код само-документируемым.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥43
✈️LangChain — это библиотека, разработанная для создания приложений на основе языковых моделей (таких как OpenAI GPT) с упором на составление сложных цепочек действий. Она позволяет интегрировать языковые модели с другими инструментами и API, а также реализовывать логики, которые выходят за рамки простых запросов и ответов.

➡️Основные возможности:
💬Создание конвейеров обработки текста.
💬Подключение различных модулей NLP (токенизация, лемматизация и т. д.).
💬Объединение моделей в единую цепочку.
💬Удобная настройка и отладка.

➡️Используется для:
💬Построения приложений для анализа текста на Python.
💬Быстрого прототипирования решений для обработки естественного языка.
💬Объединения разных библиотек NLP в одном workflow.
💬Упрощения процесса экспериментов с моделями обработки текста.

➡️Пример использования LangChain:
from langchain import LLMChain
from langchain.llms import OpenAI

# Инициализация языковой модели
llm = OpenAI(api_key="YOUR_API_KEY")

# Определение шаблона для вопроса
template = "Какой ответ на вопрос: {question}?"

# Создание цепочки с использованием шаблона
chain = LLMChain(llm=llm, prompt=template)

# Ввод вопроса
question = "Что такое LangChain?"

# Получение ответа
response = chain.run({"question": question})

print(response)

⬆️В этом примере мы инициализируем языковую модель OpenAI, создаем шаблон для вопроса и затем создаем цепочку (chain), которая объединяет модель и шаблон. После этого мы можем передать свой вопрос и получить ответ.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍65🔥4
✈️В современном мире разработки программного обеспечения все больше и больше акцент делается на создании API (Application Programming Interface) для обмена данными между различными приложениями. Когда дело доходит до тестирования и отладки этих API, инструменты, такие как POSTMAN, становятся незаменимыми.

➡️Основные возможности POSTMAN

POSTMAN - это инструмент для тестирования и отладки API, который предоставляет разработчикам простой и удобный способ отправки HTTP-запросов и получения ответов. Он имеет интуитивно понятный пользовательский интерфейс, который позволяет легко создавать и отправлять запросы различных типов, таких как GET, POST, PUT и DELETE. POSTMAN также позволяет добавлять параметры запросов, заголовки и тело запроса, что делает его мощным инструментом для тестирования различных сценариев.

➡️POSTMAN также обладает возможностью автоматизации тестирования API. С помощью коллекций запросов и сценариев, вы можете создавать наборы тестовых сценариев и запускать их в автоматическом режиме. Это особенно полезно при разработке и поддержке сложных API, где необходимо проверить множество различных запросов и ответов.

Официальный сайт

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍5🔥2
✈️Функция высшего порядка — это функция, которая принимает другую функцию в качестве аргумента или возвращает функцию в качестве результата. Это основа функционального программирования в Python.

➡️Пример:
def apply(func, value):
return func(value)

def square(x):
return x * x

result = apply(square, 5)
print(result) # 25


🔫В этом примере apply принимает функцию square и значение, применяя функцию к значению. Это позволяет строить более гибкий и переиспользуемый код.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍4🔥2
✈️Оператор присваивания :=, известный как walrus-оператор, позволяет одновременно присвоить значение переменной и использовать его в выражении. Это полезно для сокращения кода и повышения читаемости.

➡️Пример:
if (n := len([1, 2, 3, 4])) > 3:
print(f"Список длинный: {n} элемента(ов)")

🔫В этом примере длина списка сохраняется в переменную n прямо внутри условия if, без отдельной строки присваивания.

💡walrus-оператор удобно использовать в циклах, условиях и генераторах, где нужно сохранить значение и сразу же его проверить или использовать.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍4🔥1
✈️Метод subclasshook используется для определения, является ли один класс подклассом другого. Он вызывается при проверке isinstance() и issubclass() для определения отношения наследования между классами.

⬆️Этот метод позволяет настроить поведение этих функций для пользовательских классов.

➡️Пример:
class A:
def __init__(self, value):
self.value = value

class B:
def __init__(self, value):
self.value = value

def __subclasshook__(cls, subclass):
return (hasattr(subclass, 'value') and
callable(subclass.value) and
subclacc.value.__name__ == 'print_value')

class C:
def __init__(self, value):
self.value = value

def print_value(self):
print(self.value)

a = A(5)
b = B(10)
c = C(15)

# Проверка
print(issubclass(C, B)) # True
print(issubclass(A, B)) # False


⬆️В примере метод subclasshook класса B проверяет, есть ли у подкласса метод print_value. Если да, то возвращает True, что позволяет считать его подклассом B.

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