Python/ django
58.7K subscribers
2.11K photos
67 videos
48 files
2.83K links
по всем вопросам @haarrp

@itchannels_telegram - 🔥 все ит-каналы

@ai_machinelearning_big_data -ML

@ArtificialIntelligencedl -AI

@datascienceiot - 📚

@pythonlbooks

РКН: clck.ru/3FmxmM
加入频道
🖥 Hotpdf: a fast PDF parsing library to extract text and find text within PDF

hot pdf - это библиотека быстрого анализа PDF-файлов для извлечения текста и поиска текста в PDF-документах, созданная поверх pdfminer.six

pip install hotpdf

Github

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
🔤Вопрос: как работает распаковка (*) в Python?
Что происходит, скажем, в случае такого генераторного выражения?
gen = (num for num in range(10))
print(*gen)



🔜Всё проще, чем кажется.
*args и **kwargs — это способы передачи переменного количества аргументов в функцию. Другими словами, они "распаковывают" значения из массива/словаря/множества и т.п. и передают эти значения в функцию.

🔜Пример использования *args:
def test(a, b): # Принимаем параметры a и b
print(a + b) # Выводим их сложение

array = [1, 2] # Создаём массив из двух чисел

test(*array) # Вывод: 3

При записи *array значения для функции были преобразованы в test(1, 2)

🔜Пример использования **kwargs:
def test(a,b): # Принимаем параметры a и b
print(a + b) # Выводим их сложение

dct = {'a':1, 'b':2} # Создаём словарь и записываем ключ-значение
test(**dct) # Вывод: 3

При записи **dct значения для функции были преобразованы в test(a=1, b=2)

🔜Таким же образом можно преобразовать данные в обратном направлении:
def test1(*var): # Принимаем параметры в виде множества
print(var)

test1(1, 2, 3) # Вывод: (1, 2, 3)

def test2(**var): # Принимаем параметры в виде словаря
print(var)

test2(a=1, b=2) # Вывод: {'a': 1, 'b': 2}


Такие вот дела 🖥

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Language Detection using Python

Определение языка с помощью Python.

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Python: когда использовать array вместо list?

Если в двух словах, то для хранения элементов разных типов, предпочтительнее использовать list, а для быстрых операций с числовыми данными и эффективного расходования памяти – array из модуля array.


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

Используйте списки, когда:
— Вам необходимо хранить элементы разного типа.
— Предполагается изменение объема данных.
— Важны удобство и простота поддержки кода.


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

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

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Помнишь эти методы списков в Python?

Держи, вот полезная шпаргалка, чтобы освежить их

📎 А вот ещё годный сайт, где собраны самые используемые методы/функции Python

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Полезный приём при работе с исключениями в Python

def divide(x=1, y=0):
try:
return x / y
except ZeroDivisionError:
raise ValueError("Pattern 3 error.") from None

divide()

Здесь при вызове функции divide() она вызывается с параметрами по умолчанию, то есть x=1, y=0, в общем происходит деление на 0, и мы попадаем в ветку except ZeroDivisionError.

Если бы мы не написали from None, в поднявшемся исключении встречалась бы ошибка ZeroDivisionError.
В данном случае трассировка не будет включать исходную ошибку ZeroDivisionError, а только исключение ValueError и сообщение об ошибке — всё из-за from None.

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

Вот такие дела

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Flect is a Python framework for building full-stack web applications.

Flect — это фреймворк Python для создания полнофункциональных веб-приложений.

Он позволяет легко создавать пользовательские интерфейсы, используя модели Pydantic, которые аналогичны свойствам компонентов React.

Эта интеграция позволяет быстро разрабатывать интерактивные и красивые пользовательские интерфейсы с использованием Python.

Github
Docs

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Как правильно подставлять значения из переменных / списков / словарей в SQL запрос в Python?

Лучше всего использовать SQL запросы с использованием параметров:
cursor.execute("SELECT * FROM my_table WHERE id = ?", [123])
# parameter placeholder ------------------------> ^
# список/кортеж со значениями параметров -----------> ^^^^^


Какие преимущества приносит использование параметров?
Защита от SQL-инъекций

Правильное квотирование литералов в зависимости от их типа (пример со строками, пример с датами).

Оптимизация — сокращение времени работы SQL запроса. Благодаря использованию параметров следующие шаги не выполняются при повторном запуске (зависит от БД):
— проверка синтаксиса SQL запроса
— проверка прав доступа к объектам БД
— построение плана выполнения SQL запроса

Защита от переполнения/вытеснения кеша SQL запросов. Например "безобидный" запрос qry = f"SELECT first_name, last_name FROM users WHERE id = {user_id}", который часто выполняется в нагруженной системе с различными значениями user_id может вытеснить из кеша запросов полезные запросы.

Пример использования параметров в SQL запросе:
import sqlite3

con = sqlite3.connect(":memory:")
cur = con.cursor()
cur.execute("create table lang (name, first_appeared)")

cur.execute("insert into lang values (?, ?)", ("C", 1972))

lang_list = [
("Fortran", 1957),
("Python", 1991),
("Go", 2009),
]
cur.executemany("insert into lang values (?, ?)", lang_list)

cur.execute("select * from lang where first_appeared=:year", {"year": 1972})
print(cur.fetchall())

con.close()

При таком подходе можно использовать cursor.executemany() - это значительно быстрее и эффективнее по сравнению с вставкой в цикле по одной строке.

📎 Читать подробнее

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Awesome-Web-Scraping

Список куртых инструментов, библиотек и веб-сервисов, используемых при парсинге и обработке данных.

Github

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Полезная статья по алгоритмам и структурам данных 🔥

В статье описаны такие структуры данных как:
— Массив (Array)
— Динамический массив (Dynamic array)
— Связный список (Linked list)
— Стек (Stack)
— Очередь (Queue)
— Множество (Set)
— Карта (Map)
— Двоичное дерево поиска (Binary search tree)
— Префиксное дерево (Trie)
— Граф (Graph)

Параллельно рассказывается про самые популярные алгоритмы и ещё много всего)

📎 Ссылка на статью
📎 Ещё статья в тему на русском

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM