Русский
Открыть в Telegram
PPythoner

Pythoner

@pythonercode · канал · Технологии · в индексе с 20.04.2026
6 535подписчиков−43 за неделю
637средний охват поста
9.8%ER — охват к подписчикам
6постов за 30 дней
Pythoner
Фотография
✈️ В Python абстрактные классы (ABC) — это классы, которые предназначены для того, чтобы быть базовыми для других классов, и не предполагают создания собственных экземпляров. Абстрактные классы позволяют определить общий интерфейс для группы подклассов, обеспечивая, что все они реализуют определенные методы. ➡️ Применение абстрактных классов способствует созданию более структурированного и поддерживаемого кода, повышает его читаемость и позволяет применять полиморфизм более эффективно. Они особенно полезны при разработке библиотек и фреймворков, где необходимо обеспечить определенный набор функциональности в классах-наследниках. Использование ABC помогает предотвратить ошибки, связанные с отсутствием реализации обязательных методов в подклассах, которые могли бы проявиться только во время выполнения. ➡️ Вот пример абстрактного класса и его использования: from abc import ABC, abstractmethod class Animal(ABC): # Animal - абстрактный базовый класс @abstractmethod def make_sound(self): pass @abstractmethod def move(self): pass class Dog(Animal): def make_sound(self): return "Woof!" def move(self): return "Runs" class Cat(Animal): def make_sound(self): return "Meow!" def move(self): return "Walks" dog = Dog() print(dog.make_sound()) # Вывод: Woof! print(dog.move()) # Вывод: Runs cat = Cat() print(cat.make_sound()) # Вывод: Meow! print(cat.move()) # Вывод: Walks try: animal = Animal() # Попытка создать экземпляр абстрактного класса except TypeError as e: print(e) # Вывод: Can't instantiate abstract class Animal with abstract methods make_sound, move animals = [Dog(), Cat()] for animal in animals: print(animal.make_sound()) # Полиморфизм: вызов метода make_sound для разных животных class Fish(Animal): def make_sound(self): return "Blub!" # Забыли реализовать метод move try: fish = Fish() # Попытка создать экземпляр класса с нере… Читать полностью →
22 · 1.6K ·
P
Фотография
✈️ В Python trafilatura — это мощная библиотека для извлечения основного текста из веб-страниц. Она эффективно обрабатывает HTML, XML и другие форматы, удаляя ненужные элементы, такие как навигация, реклама и боковые панели, оставляя только основной контент статьи или публикации. ➡️ Применение trafilatura широко распространено в веб-скрапинге, анализе текста, создании датасетов для машинного обучения и других задачах, где требуется чистый текст из веб-источников. Библиотека предоставляет гибкие настройки для обработки различных типов веб-страниц и поддерживает извлечение метаданных, таких как заголовок, автор и дата публикации. ➡️ Вот пример использования trafilatura для извлечения текста из веб-страницы: from trafilatura import extract downloaded_html = """ <!DOCTYPE html> <html lang="en"> <head> <title>Example Page</title> </head> <body> <h1>This is a heading</h1> <p>This is some text in a paragraph.</p> <aside>This is some text in a sidebar.</aside> <p>This is more text in another paragraph.</p> <footer>This is a footer.</footer> </body> </html> """ extracted_text = extract(downloaded_html) print(extracted_text) # Вывод: # This is a heading # This is some text in a paragraph. # This is more text in another paragraph. from trafilatura import fetch_url url = "https://www.example.com" # Замените на реальный URL try: extracted_text = fetch_url(url) if extracted_text: print(extracted_text) else: print("Не удалось извлечь текст с URL") except Exception as e: print(f"Произошла ошибка: {e}") from trafilatura import bare_extraction extracted_text_with_metadata = bare_extraction(downloaded_html, include_comments=False, include_tables=True, deduplicate=True) print(extracted_text_with_metadata) # Пример вывода (может варьироваться в зависимости от контента страницы): # {'title': 'Example Page', 'text': 'This is a heading\nThis is some text in a paragraph.\nThis is more text in another paragraph.', 'auth… Читать полностью →
38 · 1.7K ·
Pythoner
Фотография
✈️ В Python asyncpg — это высокопроизводительная библиотека для асинхронного доступа к базам данных PostgreSQL. Она построена на базе asyncio и предоставляет низкоуровневый интерфейс для взаимодействия с PostgreSQL, обеспечивая высокую скорость и эффективность. ➡️ Применение asyncpg особенно актуально в высоконагруженных веб-приложениях и сервисах, где требуется максимальная производительность при работе с базой данных. asyncpg позволяет выполнять запросы к базе данных асинхронно, не блокируя основной поток приложения, что повышает общую отзывчивость и пропускную способность. Библиотека также поддерживает продвинутые возможности PostgreSQL, такие как JSON, hstore и уведомления. ➡️ Вот пример использования asyncpg для выполнения запросов к базе данных: import asyncio import asyncpg async def run(): conn = await asyncpg.connect(user="user", password="password", database="database", host="127.0.0.1") # Подставьте свои учетные данные try: # Выполнение запроса на создание таблицы (если она не существует) await conn.execute(''' CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, name TEXT ) ''') # Выполнение запроса на вставку данных await conn.execute("INSERT INTO users (name) VALUES ($1)", "Alice") # Выполнение запроса на выборку данных result = await conn.fetch("SELECT * FROM users") print(result) # Вывод: [<Record id=1 name='Alice'>] # Выполнение параметризованного запроса на выборку данных user_name = "Alice" user = await conn.fetchrow("SELECT * FROM users WHERE name = $1", user_name) print(user) # Вывод: <Record id=1 name='Alice'> # Транзакции async with conn.transaction(): await conn.execute("UPDATE users SET name = $1 WHERE id = $2", "Bob", 1) # Обработка ошибок try: await conn.execute("SELECT * FROM non_existent_table") # Несущест… Читать полностью →
38 · 1.8K ·
P
Фотография
✈️ В Python Black — это мощный инструмент форматирования кода, известный своей бескомпромиссностью и скоростью. Black автоматически переформатирует ваш код Python в соответствии со строгим набором правил, устраняя споры о стиле кода и обеспечивая единообразное форматирование во всей кодовой базе. ➡️ Применение Black значительно упрощает командную работу над проектами, поскольку разработчикам больше не нужно тратить время на ручное форматирование кода и обсуждение стилистических предпочтений. Black также улучшает читаемость кода, делая его более понятным и удобным для восприятия. Автоматическое форматирование экономит время и позволяет сосредоточиться на логике кода, а не на его внешнем виде. ➡️ Вот пример использования Black: # неформатированный код def very_important_function(template: str, *variables, engine: str = "jinja2"): """Applies `variables` to the `template` using the `engine`.""" if engine == "jinja2": return template.render(*variables) elif engine == 'f-strings': return eval(f"f'{template}'") return template.format(*variables) # установка black: pip install black # запуск black: black имя_файла.py # отформатированный код после Black def very_important_function( template: str, *variables, engine: str = "jinja2" ): """Applies `variables` to the `template` using the `engine`.""" if engine == "jinja2": return template.render(*variables) elif engine == "f-strings": return eval(f"f'{template}'") return template.format(*variables) ⬆️В этом примере показан фрагмент кода до и после форматирования Black. Black автоматически изменил отступы, переводы строк и расположение скобок, приведя код к единому стилю. Обратите внимание, что Black не изменяет логику кода, а только его форматирование. Для использования Black необходимо установить его с помощью pip install black и запустить из командной строки, указав имя файла или директории, которую нужно отформатировать: black имя_файла.py или black .… Читать полностью →
26 · 2.1K ·
🐍Разбор Что возвращает метод строки find()? Самый быстрый способ это узнать — заглянуть в документацию Python. Согласно официальной документации, если подстрока не найдена, метод `find()` возвращает -1. Теперь интересный момент: что произойдет, если преобразовать `-1` в логическое значение? Давайте проверим: print(bool(-1)) # Результат: True Как видите, -1 в Python считается истинным значением (True) при приведении к типу bool.
4 · 1.8K ·
P
Фотография
✈️ В Python BeautifulSoup4 (bs4) — это мощная библиотека для парсинга HTML и XML документов. Она предоставляет удобный интерфейс для навигации, поиска и модификации элементов в древовидной структуре документа. BeautifulSoup4 автоматически обрабатывает некорректный HTML, что делает её незаменимой для работы с реальными веб-страницами. ➡️ Применение BeautifulSoup4 широко распространено в веб-скрапинге, извлечении данных, анализе веб-контента и автоматизации задач, связанных с обработкой HTML и XML. Библиотека позволяет легко извлекать текст, ссылки, атрибуты и другие данные из веб-страниц. ➡️ Вот пример использования BeautifulSoup4 для парсинга HTML: from bs4 import BeautifulSoup html_content = """ <!DOCTYPE html> <html lang="en"> <head> <title>Example Page</title> <meta name="description" content="Example description"> </head> <body> <h1>This is a heading</h1> <p>This is some text in a paragraph.</p> <a href="https://www.example.com">This is a link</a> <ul> <li>Item 1</li> <li>Item 2</li> </ul> <div class="my-class">This is a div</div> <p id="my-id">This is a paragraph with id </p> </body> </html> """ soup = BeautifulSoup(html_content, "html.parser") # "html.parser" - используемый парсер # Навигация и поиск элементов: title = soup.title.string # Получение текста заголовка print("Title:", title) description = soup.find("meta", attrs={"name": "description"})["content"] print("Description:", description) links = soup.find_all("a") for link in links: print("Link:", link["href"]) paragraphs = soup.find_all("p") for p in paragraphs: print("Paragraph:", p.text) list_items = soup.find("ul").find_all("li") for item in list_items: print("List item:", item.text) div_with_class = soup.find("div", class_="my-class") print("Div with class:", div_with_class.text) paragraph_with_id = soup.find("p", id="my-id") print("Paragraph with id:", paragraph_with_id.text) # Модификация HTML: new_paragraph… Читать полностью →
40 · 1.9K ·
P
Pythoner
Фотография
✈️ В Python dataclasses — это модуль, предоставляющий декоратор @dataclass, который автоматически генерирует шаблонный код для классов, преимущественно предназначенных для хранения данных. Это упрощает создание классов с атрибутами, методами __init__, __repr__, __eq__ и другими, без необходимости писать их вручную. ➡️ Применение dataclasses позволяет сократить объем кода, улучшить его читаемость и уменьшить вероятность ошибок, связанных с ручным написанием шаблонного кода. Они особенно полезны для создания классов, представляющих структуры данных или объекты с простым набором атрибутов. ➡️ Вот пример использования dataclasses: from dataclasses import dataclass, field @dataclass(order=True) # order=True добавляет методы сравнения class Person: name: str age: int city: str = "Unknown" # Значение по умолчанию email: str = field(default="[email protected]", repr=False) # repr=False скрывает поле в __repr__ scores: list[int] = field(default_factory=list) # mutable default value person1 = Person("Alice", 30, "New York", scores=[100, 90]) person2 = Person("Bob", 25, "Los Angeles") person3 = Person("Charlie", 35, scores=[80, 85]) person4 = Person("Alice", 30, "New York", scores=[100, 90]) print(person1) # Вывод: Person(name='Alice', age=30, city='New York', scores=[100, 90]) print(person2) # Вывод: Person(name='Bob', age=25, city='Los Angeles', scores=[]) print(person3) # Вывод: Person(name='Charlie', age=35, city='Unknown', scores=[80, 85]) print(person1 == person4) # True print(person1 > person2) # True (сравнение по name, затем age) # Изменение атрибутов: person1.city = "San Francisco" person1.scores.append(95) print(person1) # Вывод: Person(name='Alice', age=30, city='San Francisco', scores=[100, 90, 95]) # Post-init processing @dataclass class InventoryItem: """Class for keeping track of an item in inventory.""" name: str unit_price: float quantity_on_hand: int = 0 def __post_init__(self): self… Читать полностью →
24 · 1.7K ·
Pythoner
Фотография
✈️ В Python FastAPI — это современный, высокопроизводительный веб-фреймворк для создания API. Он основан на стандартах OpenAPI и JSON Schema, что обеспечивает автоматическую генерацию интерактивной документации и валидацию данных. FastAPI использует асинхронный подход (ASGI), что делает его одним из самых быстрых Python фреймворков. ➡️ Применение FastAPI идеально подходит для разработки API, микросервисов, backend-систем и других веб-приложений, где требуется высокая производительность, простота разработки и надежная валидация данных. Автоматическая генерация документации существенно упрощает взаимодействие с API. ➡️ Вот пример простого приложения FastAPI: from fastapi import FastAPI, Query, Path, HTTPException from pydantic import BaseModel from typing import List, Optional app = FastAPI(title="My Awesome API", version="1.0.0", description="Example FastAPI application") class Item(BaseModel): name: str description: Optional[str] = None price: float tax: Optional[float] = None @app.get("/") # GET-запрос на корневой путь async def root(): return {"message": "Hello World"} @app.get("/items/{item_id}") # GET-запрос с параметром пути async def read_item(item_id: int = Path(..., title="The ID of the item to get", ge=1)): # Валидация параметра пути return {"item_id": item_id} @app.get("/items/") async def read_items(q: Optional[str] = Query(None, min_length=3, max_length=50)): # Валидация query-параметра results = {"items": [{"item_id": "foo"}, {"item_id": "bar"}]} if q: results.update({"q": q}) return results @app.post("/items/", response_model=Item) # POST-запрос с валидацией тела запроса async def create_item(item: Item): return item @app.put("/items/{item_id}") async def update_item(item_id: int, item: Item): return {"item_id": item_id, **item.dict()} @app.get("/users/{user_id}") async def get_user(user_id: int): # Пример обработки ошибок if user_id == 404: raise HTTPException(s… Читать полностью →
37 · 1.7K ·
P
Фотография
✈️ В Python модуль `difflib` — это мощный инструмент для сравнения последовательностей, таких как строки, списки и другие итерируемые объекты. Он предоставляет классы и функции для вычисления различий между последовательностями, что позволяет эффективно находить и отображать изменения, например, в текстовых файлах или других данных. ➡️ Применение difflib разнообразно: от сравнения версий файлов и поиска плагиата до создания патчей и слияния изменений в системах контроля версий. Он также может быть полезен для анализа текстовых данных, например, для выявления изменений в документах или сравнения ответов пользователей. ➡️ Вот пример использования difflib для сравнения двух строк: import difflib text1 = """ This is the first line. This is the second line. This is the third line. """ text2 = """ This is the first line. This is the modified second line. This is the fourth line. """ diff = difflib.ndiff(text1.splitlines(), text2.splitlines()) print("\n".join(diff)) # Вывод: # This is the first line. # - This is the second line. # + This is the modified second line. # ? +++++++++ # # - This is the third line. # ? --- # # + This is the fourth line. # ? ++++ # ^ # Более наглядное сравнение: diff = difflib.unified_diff(text1.splitlines(), text2.splitlines(), fromfile='file1.txt', tofile='file2.txt') print("\n".join(diff)) # Вывод: # --- file1.txt # +++ file2.txt # @@ -1,4 +1,4 @@ # # This is the first line. # -This is the second line. # +This is the modified second line. # -This is the third line. # +This is the fourth line. # Сравнение HTML: from difflib import HtmlDiff html_diff = HtmlDiff() table = html_diff.make_table(text1.splitlines(), text2.splitlines(), fromdesc='file1.txt', todesc='file2.txt') with open('diff.html', 'w') as f: f.write(table) # Сохранение результата в HTML файл ⬆️ В этом примере демонстрируется использование функций ndiff и unified_diff для сравнения двух строк построчно.… Читать полностью →
26 · 1.8K ·
P
Pythoner
Фотография
✈️ В Python модуль `concurrent.futures` предоставляет высокоуровневый интерфейс для асинхронного выполнения вызовов функций, используя пул потоков или процессов. Он упрощает распараллеливание задач и позволяет эффективно использовать многоядерные процессоры для ускорения выполнения программ. ➡️ Применение concurrent.futures особенно полезно при работе с I/O-bound задачами, такими как сетевые запросы, чтение/запись файлов, взаимодействие с базами данных. Он также может быть эффективен для CPU-bound задач, если они могут быть разделены на независимые подзадачи. ➡️ Вот пример использования concurrent.futures с ThreadPoolExecutor: import concurrent.futures import time import requests URLS = [ "https://www.example.com", "https://www.google.com", "https://www.python.org", "https://www.wikipedia.org", ] def load_url(url, timeout): try: response = requests.get(url, timeout=timeout) return f"{url}: {len(response.content)} bytes" except requests.exceptions.RequestException as e: return f"{url}: Error: {e}" start_time = time.time() # Последовательное выполнение: for url in URLS: print(load_url(url, timeout=60)) end_time = time.time() print(f"Последовательное выполнение заняло: {end_time - start_time} секунд") start_time = time.time() # Асинхронное выполнение с ThreadPoolExecutor: with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor: # map() возвращает результаты в порядке URLS future_to_url = {executor.submit(load_url, url, 60): url for url in URLS} for future in concurrent.futures.as_completed(future_to_url): url = future_to_url[future] try: data = future.result() except Exception as exc: print(f"{url}: generated an exception: {exc}") else: print(data) end_time = time.time() print(f"Асинхронное выполнение заняло: {end_time - start_time} секунд") ⬆️ В этом примере демонстрируется загрузка содержимого нескольки… Читать полностью →
22 · 1.7K ·
P
Pythoner
Фотография
✈️ В Python shutil (shell utilities) — это высокоуровневая библиотека, предоставляющая функции для работы с файлами и директориями. Она расширяет возможности модуля os и упрощает выполнение распространенных операций, таких как копирование, перемещение, удаление, архивирование и работа с файловыми путями. ➡️ Применение shutil позволяет писать более чистый и понятный код при работе с файловой системой. Библиотека предоставляет удобные функции для выполнения сложных операций, например, рекурсивного копирования директорий или создания архивов различных форматов. ➡️ Вот пример использования shutil: import shutil import os # Копирование файла: shutil.copy("source_file.txt", "destination_folder/") # Копирование в директорию shutil.copy("source_file.txt", "destination_file.txt") # Копирование с новым именем # Копирование директории (рекурсивно): shutil.copytree("source_folder", "destination_folder") # Перемещение файла или директории: shutil.move("source_file.txt", "destination_folder/") shutil.move("source_folder", "destination_folder") # Удаление файла: os.remove("file_to_delete.txt") # Удаление директории (рекурсивно): shutil.rmtree("directory_to_delete") # Создание архива: shutil.make_archive("archive_name", "zip", "folder_to_archive") # ZIP архив shutil.make_archive("archive_name", "gztar", "folder_to_archive") # tar.gz архив shutil.make_archive("archive_name", "bztar", "folder_to_archive") # tar.bz2 архив shutil.make_archive("archive_name", "xztar", "folder_to_archive") # tar.xz архив # Работа с файловыми путями (некоторые примеры): print(shutil.which("python")) # Путь к исполняемому файлу python # Проверка дискового пространства total, used, free = shutil.disk_usage("/") # Получение информации о дисковом пространстве (корневой раздел) print(f"Total: {total // (2**30)} GiB") print(f"Used: {used // (2**30)} GiB") print(f"Free: {free // (2**30)} GiB") ⬆️ В этом примере демонстрируются функции shutil для копирования файлов и директорий, перемещен… Читать полностью →
27 · 1.9K ·
Pythoner
Фотография
✈️ В Python NumPy — это фундаментальная библиотека для научных вычислений. Она предоставляет мощный N-мерный массив (ndarray), а также широкий набор функций для работы с этими массивами. NumPy является основой для многих других библиотек, таких как SciPy, Pandas и Matplotlib. ➡️ Применение NumPy крайне разнообразно и включает в себя математические операции, линейную алгебру, обработку сигналов, работу с изображениями, машинное обучение и многое другое. Благодаря векторизованным операциям и эффективной работе с памятью, NumPy обеспечивает высокую производительность при работе с большими объемами данных. ➡️ Вот пример использования NumPy: import numpy as np # Создание массивов: a = np.array([1, 2, 3]) # Одномерный массив b = np.array([[1, 2, 3], [4, 5, 6]]) # Двумерный массив c = np.zeros((2, 3)) # Массив из нулей d = np.ones((3, 2)) # Массив из единиц e = np.arange(10) # Массив с числами от 0 до 9 f = np.linspace(0, 1, 5) # Массив из 5 чисел, равномерно распределенных от 0 до 1 g = np.random.rand(2, 2) # Массив случайных чисел от 0 до 1 print("a:", a) print("b:", b) print("c:", c) print("d:", d) print("e:", e) print("f:", f) print("g:", g) # Математические операции: print("a + 2:", a + 2) print("a * 3:", a * 3) print("a.sum():", a.sum()) # Сумма элементов массива print("b.mean():", b.mean()) # Среднее значение элементов массива print("a.dot(a): ", a.dot(a)) # Скалярное произведение векторов # Индексация и срезы: print("a[0]:", a[0]) print("b[1, 2]:", b[1, 2]) print("e[1:4]:", e[1:4]) # Изменение формы массива: print("b.reshape(3, 2):", b.reshape(3, 2)) print("a.T:", a.T) # Транспонирование массива # Линейная алгебра: A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6], [7, 8]]) print("A.dot(B):", A.dot(B)) # Умножение матриц print("np.linalg.inv(A):", np.linalg.inv(A)) # Обратная матрица ⬆️ В этом примере демонстрируются различные способы создания массивов NumPy, выполнение математических операций с массивами, индексация и срезы массивов, … Читать полностью →
15 · 1.6K ·
P
Фотография
✈️ В Python pypy3 — это альтернативная реализация интерпретатора Python, использующая JIT-компиляцию (Just-In-Time). Это означает, что pypy3 динамически компилирует Python-код в машинный код во время выполнения, что часто приводит к значительному увеличению скорости работы программ. ➡️ Применение pypy3 особенно эффективно для CPU-bound задач, где основное время выполнения тратится на вычисления. В таких случаях pypy3 может значительно превзойти стандартный интерпретатор CPython. Однако, pypy3 не всегда является оптимальным выбором, особенно для программ, интенсивно использующих C-расширения, которые могут работать медленнее или вообще не работать с pypy3. ➡️ Вот пример, демонстрирующий разницу в производительности между CPython и pypy3: import time def compute_intensive_task(n): result = 0 for i in range(n): result += i * i return result start_time = time.time() result = compute_intensive_task(10000000) # CPU-bound задача end_time = time.time() print(f"Результат: {result}") print(f"Время выполнения: {end_time - start_time} секунд") # Для запуска с pypy3: pypy3 example.py ⬆️ В этом примере выполняется вычислительно интенсивная задача. Запустив этот код сначала с помощью стандартного интерпретатора CPython, а затем с помощью pypy3, можно заметить существенную разницу во времени выполнения. pypy3, вероятно, выполнит задачу значительно быстрее благодаря JIT-компиляции. Важно помнить, что результаты могут варьироваться в зависимости от конкретной задачи и аппаратного обеспечения. Этот пример демонстрирует преимущества pypy3 для CPU-bound задач. Для I/O-bound задач, где основное время тратится на ожидание ввода/вывода (например, сетевые запросы), разница в производительности может быть менее заметной. 🐍 Pythoner
18 · 1.7K ·
P
Pythoner
Фотография
✈️Сегодня поговорим о вечном противостоянии в мире тестирования. Знаете, как в споре "табы или пробелы", у нас есть другая горячая тема: unit-тесты против property-based тестирования. Давайте разберёмся без занудства, но с конкретикой! ➡️Unit-тестирование - это как стрельба по мишеням. Мы точно знаем, какой результат хотим получить, и проверяем конкретные случаи. Например: def test_sum(): assert sum([1, 2, 3]) == 6 assert sum([-1, 1]) == 0 ✅Плюсы unit-тестов: —Понятны даже джуниору —Легко дебажить —Отлично подходят для документирования кода —Быстро выполняются ❌Минусы: —Покрывают только те кейсы, о которых мы подумали —Часто пропускаем edge-cases —Может быть много копипасты ➡️А вот property-based тестирование - это как игра в рулетку, только с гарантированным выигрышем! Вместо конкретных значений мы определяем свойства, которым должна соответствовать наша функция. Библиотека (например, hypothesis) сама генерирует тестовые данные: from hypothesis import given import hypothesis.strategies as st @given(st.lists(st.integers())) def test_sum_properties(numbers): assert sum(numbers) == sum(reversed(numbers)) assert sum(numbers + [0]) == sum(numbers) ✅Преимущества property-testing: —Находит неочевидные баги —Меньше кода, больше покрытие —Заставляет думать о свойствах функций, а не о конкретных значениях ❌Недостатки: —Сложнее придумывать правильные свойства —Медленнее выполняются —Может быть сложно понять, почему тест упал 💡Не выбирайте что-то одно! Используйте unit-тесты для очевидных кейсов и документирования, а property-based - для поиска краевых случаев и сложной логики. Особенно это актуально для математических функций, парсеров и сериализаторов. 📍В идеальном мире ваши тесты должны быть как хороший детектив - проверять очевидное и раскрывать неожиданное. И помните: лучший тест - тот, который ловит баги до прода! 🐍 Pythoner
20 · 1.9K ·
P
Pythoner
Фотография
✈️ Conda — это кроссплатформенный менеджер пакетов и система управления окружением, которая упрощает установку, обновление и управление пакетами, особенно для научных вычислений и анализа данных. Conda работает с языками программирования Python, R, Ruby, Lua, Scala, Java, JavaScript, C/ C++, FORTRAN. ➡️ Применение conda помогает изолировать проекты с разными зависимостями, избегая конфликтов версий. Conda управляет не только пакетами Python, но и зависимостями на уровне операционной системы, такими как библиотеки, что особенно важно при работе с научными библиотеками. Conda также упрощает создание воспроизводимых сред для исследований и разработок. ➡️ Вот пример использования conda для создания и управления виртуальными окружениями: # Создать новое окружение с Python 3.9 conda create -n my_env python=3.9 # Активировать окружение conda activate my_env # Установить пакеты в активное окружение conda install numpy pandas scipy # Просмотреть список установленных пакетов conda list # Деактивировать окружение conda deactivate # Удалить окружение conda remove -n my_env --all # Создать окружение из файла environment.yml conda env create -f environment.yml # Экспортировать окружение в файл environment.yml conda env export > environment.yml # Обновить все пакеты в активном окружении conda update --all # Поиск пакета conda search numpy ⬆️ В этом примере показаны основные команды conda для создания, активации, деактивации и удаления виртуальных окружений. Также продемонстрировано, как устанавливать пакеты, просматривать список установленных пакетов, создавать окружение из файла environment.yml, экспортировать текущее окружение в файл environment.yml , обновлять все пакеты в окружении и искать нужный пакет. Использование виртуальных окружений с conda — лучшая практика для управления зависимостями проектов и предотвращения конфликтов. 🐍 Pythoner
32 · 1.9K ·
P
Pythoner
Фотография
✈️ В Python pathlib — это модуль, предоставляющий объектно-ориентированный способ работы с файловыми путями и директориями. Он предлагает более удобный и читаемый интерфейс по сравнению с традиционными строковыми операциями с путями. ➡️ Применение pathlib упрощает работу с файловой системой, делая код более понятным и менее подверженным ошибкам. pathlib позволяет выполнять различные операции с файлами и директориями, такие как создание, удаление, переименование, чтение и запись, используя методы объектов Path. ➡️ Вот пример использования pathlib: from pathlib import Path # Создание объекта Path file_path = Path("my_file.txt") directory_path = Path("my_directory") # Проверка существования файла/директории if file_path.exists(): print(f"Файл {file_path} существует") else: print(f"Файл {file_path} не существует") if directory_path.exists(): print(f"Директория {directory_path} существует") if directory_path.is_dir(): print(f"Это директория") # Создание директории directory_path.mkdir(parents=True, exist_ok=True) # parents=True создает все родительские директории при необходимости, exist_ok=True предотвращает ошибку, если директория уже существует # Создание файла и запись в него file_path.write_text("Hello, pathlib!") # Чтение из файла file_content = file_path.read_text() print(f"Содержимое файла: {file_content}") # Переименование файла new_file_path = Path("my_new_file.txt") file_path.rename(new_file_path) # Удаление файла new_file_path.unlink() # Перебор файлов в директории for file in directory_path.iterdir(): print(file) # Получение абсолютного пути absolute_path = directory_path.resolve() print(f"Абсолютный путь: {absolute_path}") # Создание вложенных директорий и файла nested_dir = Path("my_directory/nested/deeper") nested_dir.mkdir(parents=True, exist_ok=True) nested_file = nested_dir / "nested_file.txt" # / используется для объединения путей nested_file.write_text("Content in nested file") import shutil # Удаление директ… Читать полностью →
43 · 2.2K ·
P
Фотография
✈️ Асинхронное использование httpx. В Python httpx предоставляет мощный и удобный асинхронный интерфейс для работы с HTTP-запросами. Асинхронный режим позволяет эффективно обрабатывать множество запросов параллельно, не блокируя основной поток выполнения, что особенно полезно при взаимодействии с медленными или перегруженными серверами. ➡️ Применение асинхронного httpx идеально подходит для ситуаций, где требуется высокая производительность при работе с сетью, например, при веб-скрапинге, взаимодействии с API, загрузке файлов и обработке потоковых данных. Асинхронный подход позволяет максимально использовать ресурсы системы и сократить время ожидания ответов от сервера. ➡️ Вот примеры, демонстрирующие асинхронную работу с httpx: import asyncio import httpx async def fetch_page(client: httpx.AsyncClient, url: str): try: response = await client.get(url, timeout=10.0) response.raise_for_status() return {"url": url, "status_code": response.status_code, "content": response.text} except httpx.HTTPError as exc: return {"url": url, "error": f"HTTP Error: {exc}"} except httpx.TimeoutException: return {"url": url, "error": "Request timed out"} except Exception as e: return {"url": url, "error": f"An unexpected error occurred: {e}"} async def main(): urls = [ "https://www.example.com", "https://www.google.com", "https://www.python.org", "https://this-is-an-invalid-url.com", # Пример некорректного URL "https://jsonplaceholder.typicode.com/todos/1" # Пример API ] async with httpx.AsyncClient(http2=True) as client: # Использование HTTP/2 tasks = [fetch_page(client, url) for url in urls] results = await asyncio.gather(*tasks) for result in results: print(result) async def make_requests_with_limits(urls, max_concurrent=5): semaphore = asyncio.Semaphore(max_concurrent) async def fetch_with_semaphore(url): a… Читать полностью →
33 · 1.9K ·
Pythoner
Фотография
✈️ В Python tqdm — это быстрая, расширяемая библиотека индикаторов выполнения. Она позволяет легко добавлять индикаторы прогресса к циклам, итерациям и другим длительным операциям, предоставляя пользователю визуальную информацию о ходе выполнения. ➡️ Применение tqdm повышает удобство использования скриптов и программ, особенно при работе с большими объемами данных или длительными вычислениями. tqdm автоматически оценивает оставшееся время, отображает скорость выполнения и предоставляет множество настроек для кастомизации внешнего вида индикатора. ➡️ Вот пример использования tqdm: from tqdm import tqdm import time # Простой пример с range for i in tqdm(range(100)): time.sleep(0.02) # Имитация длительной операции # С ручным обновлением with tqdm(total=100) as pbar: for i in range(10): time.sleep(0.1) pbar.update(10) # Обновление индикатора на 10 единиц # С описанием for i in tqdm(range(100), desc="Обработка данных"): time.sleep(0.02) # Вложенные циклы from tqdm import trange for i in trange(4, desc="1st loop"): for j in trange(5, desc="2nd loop", leave=False): for k in trange(50, desc="3rd loop", leave=False): time.sleep(0.001) # С pandas import pandas as pd df = pd.DataFrame({'a': range(10000)}) # Применение tqdm к pandas DataFrame (apply с progress_apply) tqdm.pandas() # Необходимо для progress_apply df['b'] = df['a'].progress_apply(lambda x: x*x) # Индикатор выполнения для apply # Пример с файлами import os with open("large_file.txt", "w") as f: for i in trange(10000, desc="Создание файла"): f.write("This is a line of text.\n") with open("large_file.txt", "r") as f: for line in tqdm(f, total=os.path.getsize("large_file.txt"), unit="B", unit_scale=True, unit_divisor=1024, desc="Чтение файла"): # Обработка каждой строки файла pass ⬆️ В этом примере демонстрируются различные способы использования tqdm. Показаны примеры с range, ручным обновлением, описанием, вложе… Читать полностью →
44 · 2.2K ·
P
Фотография
✈️ В Python aioredis — это асинхронная библиотека для работы с базой данных Redis. Она построена на базе asyncio и предоставляет неблокирующий интерфейс для взаимодействия с Redis, что позволяет эффективно обрабатывать множество запросов одновременно. ➡️ Применение aioredis особенно полезно в асинхронных приложениях, где требуется высокая производительность и отзывчивость. aioredis позволяет выполнять операции с Redis без блокировки основного потока, что повышает эффективность использования ресурсов. ➡️ Вот пример использования библиотеки aioredis в Python: import asyncio import aioredis async def redis_example(): try: # Подключение к Redis redis = await aioredis.create_redis_pool( 'redis://localhost', db=0, encoding='utf-8', # Декодирование в UTF-8 minsize=5, # Минимальное количество соединений в пуле maxsize=10 # Максимальное количество соединений в пуле ) # Работа со строками await redis.set('name', 'John Doe') name = await redis.get('name') print(f"Name: {name}") # Вывод: Name: John Doe # Работа со списками await redis.rpush('my_list', 'one', 'two', 'three') list_length = await redis.llen('my_list') list_items = await redis.lrange('my_list', 0, -1) print(f"List length: {list_length}") # Вывод: List length: 3 print(f"List items: {list_items}") # Вывод: List items: ['one', 'two', 'three'] # Работа с хэшами await redis.hset('user:1', 'name', 'Alice') await redis.hset('user:1', 'age', 30) user_data = await redis.hgetall('user:1') print(f"User data: {user_data}") # Вывод: User data: {'name': 'Alice', 'age': '30'} # Работа с множествами await redis.sadd('my_set', 'apple', 'banana', 'cherry') set_members = await redis.smembers('my_set') print(f"Set members: {set_members}") # Вывод: Set members: {'apple', 'bana… Читать полностью →
30 · 2K ·
Pythoner
Фотография
✈️Sketch — это библиотека для статистического анализа и обработки данных. Она позволяет быстро проводить первичный анализ данных и строить прототипы моделей машинного обучения. ➡️Основные возможности: — Быстрый и эффективный подсчёт статистик по данным, таких как сумма, среднее, медиана, дисперсия. — Аппроксимация распределений и плотностей вероятности. — Вычисление квантилей, сглаживания, гистограмм. — Тестирование статистических гипотез, оценка p-value. — Генерация случайных чисел из разных распределений. ➡️Sketch позволяет ускорить статистический анализ данных с помощью простого и интуитивного API и используется для: — Первичного анализа и визуализации данных. — Статистических тестов в научных исследованиях. — Построения прототипов моделей машинного обучения. — Анализа пользовательских действий и событий. — Симуляции процессов на основе статистических моделей. 🐍 Pythoner
22 · 1.9K ·
P
Фотография
✈️ В Python Selenium — это мощная библиотека для автоматизации веб-браузеров. Она позволяет управлять браузером программно, имитируя действия пользователя, такие как клики, ввод текста и навигация. ➡️ Применение Selenium широко распространено в веб-тестировании, веб-скрапинге и автоматизации задач. Она поддерживает различные браузеры, включая Chrome, Firefox, Safari и Edge. ➡️ Вот пример использования Selenium для автоматизации открытия страницы и поиска элемента: from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # Инициализация драйвера Chrome (убедитесь, что ChromeDriver установлен и находится в PATH) driver = webdriver.Chrome() try: # Открытие страницы driver.get("https://www.example.com") # Явное ожидание элемента с ID "my-element" (до 10 секунд) element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "my-element")) ) # Вывод текста элемента print(element.text) finally: # Закрытие браузера driver.quit() ⬆️ В этом примере показано, как использовать Selenium для открытия веб-страницы, ожидания загрузки определенного элемента с помощью WebDriverWait и извлечения его текста. Убедитесь, что у вас установлен ChromeDriver и он добавлен в переменную окружения PATH или указан в executable_path при инициализации драйвера. Этот пример демонстрирует базовый сценарий использования Selenium, который можно расширить для выполнения более сложных действий, таких как заполнение форм, взаимодействие с JavaScript и обработка динамически загружаемого контента. 🐍 Pythoner
30 · 2.2K ·
P
Pythoner
Фотография
✈️ В Python typer — это современная и удобная библиотека для создания CLI-приложений (интерфейсов командной строки). Она построена на основе популярной библиотеки click и предоставляет простой и интуитивно понятный способ определения команд, аргументов и опций. ➡️ Применение typer особенно полезно при разработке инструментов командной строки, скриптов автоматизации и других приложений, где требуется взаимодействие с пользователем через терминал. typer автоматически генерирует справку и подсказки для пользователя, поддерживает типизацию аргументов и интегрируется с FastAPI. ➡️ Вот пример использования typer: import typer app = typer.Typer() @app.command() def hello(name: str): """ Простое приветствие. """ print(f"Привет, {name}!") @app.command() def goodbye(name: str, formal: bool = False): """ Прощание. Можно сделать формальным. """ if formal: print(f"До свидания, {name}!") else: print(f"Пока, {name}!") if __name__ == "__main__": app() ⬆️ В этом примере показано создание простого CLI-приложения с двумя командами: "hello" и "goodbye". Команда "hello" принимает один аргумент — имя, и выводит приветствие. Команда "goodbye" принимает имя и опциональный аргумент "formal", который определяет, будет ли прощание формальным. Запустив этот скрипт и введя python main.py --help, вы получите автоматически сгенерированную справку по использованию приложения. 🐍 Pythoner
25 · 2K ·

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем