array
вместо list
?list
, а для быстрых операций с числовыми данными и эффективного расходования памяти – array
из модуля array
.Используйте списки, когда:
— Вам необходимо хранить элементы разного типа.
— Предполагается изменение объема данных.
— Важны удобство и простота поддержки кода.
Массивы предназначены для высокопроизводительной работы с большими массивами однородных данных, особенно числовых.
Выбирайте массивы, когда:
— Вы работаете исключительно с числами одного типа.
— Обрабатываете большие объемы данных и важна экономия памяти.
— Нужна тесная интеграция с C-кодом.
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Держи, вот полезная шпаргалка, чтобы освежить их
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
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 — это фреймворк
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 запросы с использованием параметров:
⏩ Какие преимущества приносит использование параметров?
— Защита от SQL-инъекций
— Правильное квотирование литералов в зависимости от их типа (пример со строками, пример с датами).
— Оптимизация — сокращение времени работы SQL запроса. Благодаря использованию параметров следующие шаги не выполняются при повторном запуске (зависит от БД):
— проверка синтаксиса SQL запроса
— проверка прав доступа к объектам БД
— построение плана выполнения SQL запроса
— Защита от переполнения/вытеснения кеша SQL запросов. Например "безобидный" запрос
⏩ Пример использования параметров в SQL запросе:
При таком подходе можно использовать
📎 Читать подробнее
@pythonl
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
может вытеснить из кеша запросов полезные запросы. 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
Список куртых инструментов, библиотек и веб-сервисов, используемых при парсинге и обработке данных.
▪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
This media is not supported in your browser
VIEW IN TELEGRAM
Хорошо подходит для работы со сложными диаграммами: сперва можно создать диаграмму в десктопной версии Draw.io, а потом доработать ее в VScode с помощью расширения Draw.io Integration.
Quarto — крутая штука для работы с документацией под R, Python, Julia и Observable. Расширение Quarto для VScode поможет редактировать и рендерить QMD-файлы. В нем есть режим предварительного просмотра, который позволяет менять код документа и одновременно просматривать результат.
Jupyter — один из самых популярных фреймворков для создания заметок, особенно в Python. Кстати, Jupyter классно работает вместе с документацией Quarto для Python. Расширение VScode Jupyter интегрирует заметки Jupyter в редактор VScode и поддерживает ipynb-файлы.
С расширением Markdown All in One удобно редактировать документацию в формате Markdown. Оно располагает два окна рядом: редактор кода и тут же результат.
Mermaid особенно полезен, если вам нужно создать структуру кодовой базы или динамическую диаграмму. В VScode есть два расширения для работы с файлами Mermaid — Mermaid Preview и Markdown Preview Mermaid Support.
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Совет по Python: Распаковка с помощью iterables!
Знаете ли вы, что "распаковка" работает со всеми видами iterable (т.е. не только со списками или кортежами), делая ваш код короче и элегантнее. 🚀
Этот небольшой фрагмент кода / хитрость позволяет вам легко захватывать ключи или элементы. 🐍 ✨
#Python #tips
@pythonl
Знаете ли вы, что "распаковка" работает со всеми видами iterable (т.е. не только со списками или кортежами), делая ваш код короче и элегантнее. 🚀
Этот небольшой фрагмент кода / хитрость позволяет вам легко захватывать ключи или элементы. 🐍 ✨
#Python #tips
@pythonl
Проект основал Shing Lyu, один из разработчиков движка Servo и участник перевода CSS-движка Firefox на компоненты, написанные на языке Rust. Для оценки текущего состояния разработки можно использовать web-интерфейс с интерпретатором RustPython, скомпилированным в WebAssembly. Код распространяется под лицензией MIT.
RustPython состоит из парсера кода на Python в абстрактное синтаксическое дерево (AST), компилятора AST в байткод и виртуальной машины для выполнения байткода. Для ускорения выполнения предоставляется начальная реализация JIT-компилятора, преобразующего python-функции в машинный код. Поддерживается компиляция RustPython в форму универсального WASI-модуля на WebAssembly, который может запускаться в различных операционных системах.
Проектом также предоставляются средства для интеграции кода на языке Python в проекты на языке Rust, без применения биндингов на основе CPython - RustPython позволяет встраивать Python-конструкции непосредственно в код на языке Rust и использовать Python в качестве языка скриптинга в приложениях.
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM