Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍4❤2
👀6🔥2🤔1🤨1
Возникнет ошибка. Т.к. функция zip() ожидает итерируемые объекты (например, списки, кортежи или строки), а передаётся два целых числа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥5❤2
Сравнение изображений через хеши (ahash, dhash, phash, whash), что позволяет быстро искать дубликаты без полного перебора пикселей.
from PIL import Image
import imagehash
hash1 = imagehash.average_hash(Image.open('image1.jpg'))
hash2 = imagehash.average_hash(Image.open('image2.jpg'))
print(hash1 - hash2) # Чем меньше разница, тем больше похожи изображения
Автоматизация поиска дубликатов с высокой точностью и поддержкой разных алгоритмов хеширования. Отлично подойдет для очистки медиабиблиотек.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🔥3
Keras имеет несколько преимуществ, которые делают его популярным выбором среди разработчиков машинного обучения. Во-первых, Keras обладает простым и интуитивно понятным API, что делает его легко изучаемым и использованием даже для новичков. Во-вторых, Keras предоставляет множество предварительно обученных моделей, которые можно использовать для решения различных задач. Наконец, Keras обеспечивает высокую производительность и эффективность, благодаря использованию оптимизированных библиотек, таких как TensorFlow и Theano.
Keras поддерживает широкий спектр возможностей машинного обучения. Он позволяет создавать и обучать различные типы нейронных сетей, включая полносвязные сети, сверточные нейронные сети и рекуррентные нейронные сети. Кроме того, Keras предоставляет инструменты для работы с изображениями, текстом и временными рядами. Он также поддерживает автоматическое распределение обучения на несколько GPU, что позволяет ускорить процесс обучения на больших данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3❤1
user_input = " hello world "
cleaned = user_input.strip()
print(cleaned)
# ➜ "hello world"
strip() убирает лишние пробелы по краям строки, оставляя только значимый текст.Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥3👍2
Асинхронное программирование - это способ написания кода, позволяющий выполнять несколько задач одновременно без блокировки основного потока выполнения. В Python для этого используются ключевые слова async и await, которые делают функции асинхронными и определяют точки, где происходит ожидание.
1. Увеличение производительности: Асинхронный код позволяет эффективно использовать ресурсы, ускоряя выполнение задач.
2. Масштабируемость: Обработка множества задач одновременно без блокировки позволяет создавать масштабируемые приложения.
3. Улучшен отклик приложения: Пользователи получают быстрый отклик, даже если выполняются длительные операции.
- `async def` и `await`: Обозначают асинхронные функции и точки ожидания выполнения задачи.
- Цикл событий (Event Loop): Основной механизм управления выполнением асинхронных задач.
- Корутины (Coroutines): Асинхронные функции, которые могут приостанавливать свое выполнение.
import asyncio
async def async_example():
print("Начало выполнения")
await asyncio.sleep(2)
print("Завершение выполнения")
async def main():
tasks = [async_example() for _ in range(5)]
await asyncio.gather(*tasks)
if __name__ == "__main__":
asyncio.run(main())
Множество библиотек и фреймворков в Python уже поддерживают асинхронное программирование, включая aiohttp, asyncio, и многие другие. Это позволяет создавать высокопроизводительные веб-приложения, работающие с асинхронными запросами.
- Документация Python по асинхронному программированию
- Статья на Real Python: "Async IO in Python: A Complete Walkthrough"
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤5🔥2
В Python, чтобы скрыть атрибуты объекта, их нужно объявить как приватные, используя два подчеркивания перед именем атрибута. Например, для создания приватного атрибута
name нужно написать __name. Также для доступа к этому атрибуту извне класса нужно использовать специальные методы get и set.get возвращает значение приватного атрибута, а метод set устанавливает новое значение. Эти методы должны быть определены в самом классе. Например:class Person:
def __init__(self, name):
self.__name = name
def get_name(self):
return self.__name
def set_name(self, name):
self.__name = name
person = Person("John")
print(person.get_name()) # "John"
person.set_name("Mike")
print(person.get_name()) # "Mike"
- Защита данных от внешнего доступа
- Предотвращение случайных изменений данных
- Упрощение взаимодействия с объектами
- Сокрытие сложной логики работы объекта от пользователя
- Да, будет!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3🔥3🤣1
python file.py.1. Парсинг — Python-код превращается в AST (дерево разбора)
2. Компиляция — AST превращается в байткод (
.pyc), понятный интерпретатору 3. Исполнение — байткод читается виртуальной машиной, которая шаг за шагом исполняет инструкции
import dis
def hello():
print("hi")
dis.dis(hello)
CPython — медленный, но гибкий. Именно тут живёт GIL, и именно он влияет на потоки.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3❤1
data = {}
data.setdefault("users", []).append("Анна")
data.setdefault("users", []).append("Борис")
print(data)
{'users': ['Анна', 'Борис']}if key not in dict.Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍6🔥2
Одним из основных преимуществ Loguru является его простота использования. В отличие от стандартной библиотеки logging, которая может показаться сложной и громоздкой, Loguru предлагает простой и интуитивно понятный интерфейс. Для начала работы достаточно импортировать библиотеку и начать логирование с помощью одной строки кода:
from loguru import logger
logger.info("Привет, Loguru!")
Это позволяет значительно сократить время на настройку и сразу приступить к логированию.
Loguru предоставляет широкие возможности для настройки логирования. Вы можете легко настроить формат сообщений, уровни логирования и маршрутизацию логов. Например, вы можете отправлять логи в разные файлы в зависимости от их уровня важности:
logger.add("debug.log", level="DEBUG")
logger.add("error.log", level="ERROR")
logger.debug("Это сообщение для отладки")
logger.error("Это сообщение об ошибке")Или же отправлять их на удалённый сервер для дальнейшего анализа. Библиотека также поддерживает асинхронное логирование, что делает её отличным выбором для высоконагруженных приложений.
Помимо стандартных возможностей логирования, Loguru включает в себя множество дополнительных функций, которые делают его ещё более привлекательным. Например, библиотека поддерживает автоматическое добавление контекстной информации к логам, такую как имя функции, строка кода и т.д. Также существует возможность автоматического ротации логов, что позволяет избежать переполнения дискового пространства:
logger.add("file_{time}.log", rotation="500 MB")
logger.info("Это сообщение будет записано в новый файл при достижении лимита в 500 MB")Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1🔥1
— поддерживает разные типы данных (строки, списки, множества, хэши, sorted sets)
— умеет работать с TTL, Pub/Sub, скриптами (Lua)
— поддерживает персистентность и репликацию
— только строки и числа
— максимально простой и быстрый
— нет встроенной персистентности
— хорош для простого кэширования без сложной логики
Redis — если нужно больше, чем просто кэш (например, счётчики, очереди, блокировки)
Memcached — если важна скорость и simplicity при коротком сроке жизни данных
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍3❤1
Одним из главных преимуществ Pyxel является её простота использования. Она предоставляет интуитивно понятный интерфейс и минимальный набор функций, необходимых для создания игр. Это позволяет сосредоточиться на творческом процессе, не отвлекаясь на сложные технические детали.
Pyxel поставляется с набором встроенных инструментов, которые облегчают разработку игр. Среди них: редактор спрайтов, редактор звуков и редактор карт.
Ещё одно важное преимущество Pyxel — это её кроссплатформенность. Библиотека поддерживает Windows, macOS и Linux, что позволяет разрабатывать игры на любой из этих платформ.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥4❤1
from datasketch import MinHash, MinHashLSH
# Создаем "отпечатки" текстов
m1 = MinHash(num_perm=128)
m2 = MinHash(num_perm=128)
for word in ["data", "science"]: m1.update(word.encode())
for word in ["data", "analysis"]: m2.update(word.encode())
# Сравниваем (0.75 = порог схожести)
print("Схожесть:", m1.jaccard(m2)) # Результат: 0.5
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2🔥2
import string
import itertools
def brute_force_pass(target, length):
chars = string.ascii_letters + string.digits # Символы: буквы и цифры
for attempt in itertools.product(chars, repeat=length): # Генерация комбинаций
pwd_attempt = ''.join(attempt) # Преобразование кортежа в строку
print(f"Trying: {pwd_attempt}") # Вывод текущей попытки
if pwd_attempt == target: # Проверка, совпадает ли пароль
print(f"Password found: {pwd_attempt}") # Если совпал - выводим его
return pwd_attempt
print("Password not found") # Если пароль не найден
return None
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3❤1
Для начала, давайте создадим класс, который будет представлять людей. Класс будет иметь атрибуты "имя" и "возраст". Вот пример такого класса:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
Теперь, когда у нас есть класс, мы можем создать объекты на его основе. Например, давайте создадим двух людей:
person1 = Person("John", 25)
person2 = Person("Alice", 30)Чтобы поместить объекты в список, мы можем использовать метод append(). Например, чтобы создать список людей и добавить туда наших двух людей, мы можем написать следующий код:
people = []
people.append(person1)
people.append(person2)
Чтобы обратиться к объектам в списке, мы можем использовать индексы. Например, чтобы получить имя первого человека в списке people, мы можем написать следующий код:
first_person_name = people[0].name
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2🔥2👀2🤬1
from browser_history import get_history
# Получаем историю
outputs = get_history()
# Это список кортежей (дата и время, URL)
his = outputs.histories
# Выводим историю на экран
for entry in his:
print(entry)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍3🔥1
- Скорость и компактность — бинарные данные меньше и передаются быстрее, чем JSON.
- Жёсткий контракт (IDL) — схема данных описана в .proto файле, из которого генерируются клиенты и серверы на разных языках.
- Стриминг — поддержка двунаправленных потоков (клиент - сервер), что в REST приходится эмулировать через WebSocket/SSE.
- Мульти-язычность — можно легко писать сервисы на разных языках, и они будут совместимы.
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
gRPC отлично подходит для high-performance микросервисов и real-time систем, где важны скорость и строгая типизация. REST же проще для публичных API и быстрой интеграции.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤2🔥1😡1
tasks = ["Купить хлеб", "Выучить Python", "Сделать проект"]
for i, task in enumerate(tasks, start=1):
print(f"{i}. {task}")
1. Купить хлеб
2. Выучить Python
3. Сделать проект
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3❤1