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

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

Канал на бирже: https://telega.in/c/pythonercode
Download Telegram
✈️Библиотека DataSketch реализует алгоритмы вероятностного хеширования и сжатия данных для быстрого сравнения больших наборов. Она идеально для обработки Big Data и поиска дубликатов.

➡️Пример использования:
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


💡Библиотека позволяет находить дубликаты среди миллионов документов даже на обычном ноутбуке.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🔥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


💡Метод брутфорса может быть мощным инструментом, однако его использование должно быть этичным и законным. И никогда не пытайтесь взломать файлы или системы без разрешения владельцев)))

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥31
✈️Python предоставляет нам множество возможностей для работы с данными. Одной из таких возможностей является использование списков для хранения объектов. Сейчас мы рассмотрим, как создать класс, создать объекты на основе этого класса, поместить эти объекты в список и обратиться к ним.

➡️Создание класса
Для начала, давайте создадим класс, который будет представлять людей. Класс будет иметь атрибуты "имя" и "возраст". Вот пример такого класса:
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, в котором хранятся объекты, представляющие двух людей.

➡️Обращение к объектам в списке
Чтобы обратиться к объектам в списке, мы можем использовать индексы. Например, чтобы получить имя первого человека в списке people, мы можем написать следующий код:
first_person_name = people[0].name

⬆️Теперь в переменной first_person_name будет храниться значение "John".

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92🔥2👀2🤬1
✈️browser-history — это библиотека на Python, которая позволяет легко получать историю посещений и закладки из популярных браузеров.

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

➡️Пример:
from browser_history import get_history

# Получаем историю
outputs = get_history()

# Это список кортежей (дата и время, URL)
his = outputs.histories

# Выводим историю на экран
for entry in his:
print(entry)


💻GitHub

💡Модуль также поддерживает получение закладок, хотя эта функция считается экспериментальной.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3🔥1
✈️gRPC — это фреймворк удалённых вызовов (Remote Procedure Call) от Google, который использует бинарный протокол Protocol Buffers (protobuf) вместо текста (JSON).

➡️Основные преимущества перед REST:
- Скорость и компактность — бинарные данные меньше и передаются быстрее, чем JSON.
- Жёсткий контракт (IDL) — схема данных описана в .proto файле, из которого генерируются клиенты и серверы на разных языках.
- Стриминг — поддержка двунаправленных потоков (клиент - сервер), что в REST приходится эмулировать через WebSocket/SSE.
- Мульти-язычность — можно легко писать сервисы на разных языках, и они будут совместимы.

➡️Пример .proto файла:
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 и быстрой интеграции.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🔥1😡1
✈️Функция enumerate() позволяет перебирать элементы с индексами, а параметр start задаёт, с какого числа начинать счёт.

➡️Пример:
tasks = ["Купить хлеб", "Выучить Python", "Сделать проект"]

for i, task in enumerate(tasks, start=1):
print(f"{i}. {task}")

1. Купить хлеб
2. Выучить Python
3. Сделать проект


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

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥31
✈️Модуль difflib в Python - это мощный инструмент, который помогает разработчикам сравнивать последовательности. Он особенно полезен для сравнения текстовых данных и нахождения различий между ними.

➡️Функция get_close_matches

Функция get_close_matches() используется для поиска наиболее похожих вариантов в последовательности. Это полезно, например, при реализации системы автодополнения, где нужно предложить пользователю наиболее вероятные варианты на основе его ввода.

➡️Например:
import difflib

words = ['кот', 'собака', 'кит', 'слон']
difflib.get_close_matches('кот', words)


⬆️В этом примере функция возвращает: ['кот', 'кит'].

➡️Функция ndiff

Функция ndiff() используется для сравнения двух последовательностей и выявления различий между ними. Она возвращает генератор, который производит строки, иллюстрирующие различия между последовательностями. Это полезно, например, при сравнении версий текстовых документов.

➡️Например:
import difflib

str1 = "кот"
str2 = "кит"
diff = difflib.ndiff(str1, str2)
print('\\n'.join(diff))


⬆️В этом примере функция выводит:
  к
- о
+ и
т


➡️Функция SequenceMatcher

Функция SequenceMatcher() является более общей и мощной функцией, чем ndiff(). Она позволяет сравнивать любые две последовательности и определять степень их сходства.

➡️Например:
import difflib

str1 = "кот"
str2 = "кит"
match = difflib.SequenceMatcher(None, str1, str2)
print(match.ratio())


⬆️В этом примере функция возвращает: 0.6666666666666666, что означает, что строки совпадают на 66.67%.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍3🔥1
✈️Функция sample() позволяет выбрать случайным образом элементы из последовательности или коллекции. Это удобно при необходимости получить случайную выборку из данных.

➡️Функция принимает два основных аргумента:
💬population — последовательность, из которой надо выбрать элементы (list, tuple, string и т. д.)
💬k — количество элементов для выборки.

➡️Дополнительные аргументы:
💬counts — список весов элементов (по умолчанию равновероятный выбор).
💬rng — генератор случайных чисел (по умолчанию берется из модуля random).

➡️Пример:
from random import sample

letters = ['a', 'b', 'c', 'd', 'e']

result = sample(letters, k=3)

print(result)


⬆️В примере из списка букв берется случайная выборка размером 3 элемента. Результат при каждом запуске будет разный.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🔥1
👍5👏2😁2
Что выдаст код выше
Anonymous Quiz
12%
5
19%
55555
1%
5 5
32%
5 Error
36%
Error
🤔7🤨3🙈2
🤔Разбор

Функция напечатает 5 один раз, а затем выдаст ошибку, потому что дальше программа пытается вызвать "ничего" (None) как функцию


🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍3🔥2👀1
✈️В больших проектах важно точно понимать, что пошло не так. Вместо того чтобы ловить все подряд через Exception, создавайте собственные исключения:
class MyError(Exception):
pass


➡️Теперь можно выбросить исключение, связанное с вашей логикой:
raise MyError("Что-то пошло не так")


➡️Зачем это нужно?
— Код становится читаемее
— Ошибки легче отлавливать
— Проще отлаживать и тестировать
— Можно группировать ошибки по типу

➡️Вы даже можете создать иерархию ошибок:
class ValidationError(MyError):
pass

class DatabaseError(MyError):
pass


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

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🔥1
✈️Функция zip_longest() из модуля itertools объединяет несколько последовательностей, заполняя недостающие значения указанным значением.

➡️Пример:
from itertools import zip_longest

names = ["Анна", "Борис"]
scores = [90]

for name, score in zip_longest(names, scores, fillvalue="—"):
print(name, score)

Анна 90
Борис —


💡Полезно при работе с данными разной длины, чтобы не потерять элементы.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥51
✈️"Чистая" функция - это функция, которая при выполнении одного и того же входного значения всегда возвращает одинаковый результат и не имеет побочных эффектов. То есть, она не влияет на состояние программы или внешние переменные. Результат работы "чистой" функции зависит только от переданных ей аргументов.

➡️Пример чистой функции

Давайте рассмотрим пример простой чистой функции на языке Python. Предположим, у нас есть функция double, которая удваивает переданное число:
def double(number):
return number * 2


⬆️Эта функция является "чистой", потому что она всегда возвращает удвоенное значение переданного числа и не имеет побочных эффектов. Независимо от контекста выполнения и внешних переменных, результат работы этой функции будет одинаковым при одинаковом входном значении.

➡️Пример нечистой функции

Рассмотрим теперь пример нечистой функции на языке Python. Предположим, у нас есть функция add_to_list, которая добавляет переданное значение в глобальный список:
my_list = []

def add_to_list(value):
my_list.append(value)


⬆️Эта функция не является "чистой", потому что она изменяет состояние программы путем добавления значения в глобальный список my_list. Результат работы этой функции зависит не только от переданного аргумента, но и от текущего состояния списка my_list.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥42👌1
Forwarded from IT memer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🤣6👀4😁1💯1
✈️В Django ORM можно использовать механизм миграций для изменения структуры базы данных без необходимости вручную вносить изменения через SQL запросы. Миграции позволяют вам определять изменения в моделях и применять их к базе данных автоматически.

➡️Для начала работы с миграциями в Django необходимо создать начальное состояние базы данных, которое будет соответствовать текущим моделям вашего приложения. Для этого можно воспользоваться командой python manage.py makemigrations, которая создаст файл миграции в папке migrations вашего приложения.

➡️Затем, чтобы применить миграции к базе данных, можно воспользоваться командой python manage.py migrate, которая применит все необходимые изменения к базе данных. При этом Django будет автоматически отслеживать и применять новые миграции при изменениях в моделях.

➡️Миграции в Django ORM могут включать различные операции, такие как создание новых таблиц, добавление и удаление полей, изменение типа данных и многое другое. Кроме того, можно создавать собственные миграции с помощью команды python manage.py makemigrations --empty, чтобы определить свои собственные изменения в базе данных.

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

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🔥1
✈️Bulkhead (перегородка на корабле) — это архитектурный паттерн, который защищает сервис от «цепных» отказов.
Идея простая: если один компонент падает или начинает работать медленно, остальные продолжают функционировать.


➡️Как это работает:
- разделение ресурсов (пулы потоков, подключения к БД, очереди) для разных компонентов
- ограничение «захвата» всех ресурсов одним зависимым сервисом
- предотвращение лавинообразных отказов

➡️Пример:
Если сервис обращается к 3 внешним API, у каждого свой пул потоков. Тогда сбой в одном API не «забьёт» все подключения и не остановит остальные запросы.

💡Плюсы:
— устойчивость к локальным сбоям
— предсказуемая деградация системы (отваливается часть, а не всё)

💡Минусы:
— усложнение конфигурации и мониторинга
— необходимость балансировки ресурсов между пулами

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83🔥2
✈️В Python для работы с SQLite мы будем использовать модуль sqlite3, который входит в стандартную библиотеку Python. Начнем с импорта модуля и создания соединения с базой данных:
import sqlite3

# Создание соединения с базой данных
conn = sqlite3.connect('mydatabase.db')


➡️После создания соединения мы можем создать таблицы в нашей базе данных. Вот пример создания таблицы "users":
# Создание таблицы "users"
conn.execute('''CREATE TABLE users
(id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER NOT NULL);''')


➡️Вставка данных в базу данных

После создания таблицы мы можем добавить данные в базу данных. Для этого мы можем использовать метод execute() и executemany() для вставки одной или нескольких строк данных соответственно. Вот пример вставки данных в таблицу "users":
# Вставка данных в таблицу "users"
conn.execute("INSERT INTO users (name, age) VALUES ('John Doe', 25)")
conn.execute("INSERT INTO users (name, age) VALUES ('Jane Smith', 30)")
conn.executemany("INSERT INTO users (name, age) VALUES (?, ?)", [('Alice Johnson', 35), ('Bob Brown', 40)])


🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍75🔥4
✈️В Python все является объектом, даже сами классы. Это открывает перед нами удивительные возможности для создания динамических структур кода. Давайте погрузимся в мир создания классов и функций "на лету" с помощью type() и метаклассов.

➡️Магия функции type()

Функция type() в Python - это не просто инструмент для определения типа объекта. Она также может быть использована для создания новых классов динамически. Вот простой пример:
MyClass = type('MyClass', (), {'x': 42, 'my_method': lambda self: print("Hello!")})

obj = MyClass()
print(obj.x) # Выведет: 42
obj.my_method() # Выведет: Hello!

⬆️Здесь мы создали класс MyClass с атрибутом x и методом my_method. Удивительно, правда?

➡️Шаг вперед: метаклассы

Метаклассы - это классы классов. Они позволяют нам контролировать процесс создания классов. Рассмотрим пример:
class MyMetaclass(type):
def __new__(cls, name, bases, attrs):
attrs['additional_method'] = lambda self: print("I'm additional!")
return super().__new__(cls, name, bases, attrs)

class MyClass(metaclass=MyMetaclass):
pass

obj = MyClass()
obj.additional_method() # Выведет: I'm additional!

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

➡️Практическое применение

Динамическое создание классов и функций может быть полезно в различных сценариях:
- Фабрики классов: создание классов на основе внешних данных или конфигурации.
- Декораторы классов: модификация классов без изменения их исходного кода.
- ORM (Object-Relational Mapping): динамическое создание классов на основе структуры базы данных.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71😁1🤯1👀1
➡️Функция .upper()

Функция .upper() в Python используется для преобразования всех символов в строке в верхний регистр. Это очень полезно, когда вы хотите сравнить строки без учета регистра или обеспечить единообразие ввода данных.
Пример использования:
text = 'Hello, World!'
print(text.upper()) # Вывод: 'HELLO, WORLD!'


➡️Функция .lower()

С другой стороны, функция .lower() преобразует все символы строки в нижний регистр. Это также может быть полезно при сравнении строк или обеспечении единообразия ввода.
Пример использования:
text = 'Hello, World!'
print(text.lower()) # Вывод: 'hello, world!'


➡️Применение .upper() и .lower()

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

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🔥3