Python вопросы с собеседований
24.9K subscribers
757 photos
100 videos
17 files
620 links
Вопросы с собеседований по Python

@workakkk - админ

@machinelearning_interview - вопросы с собесдований по Ml

@pro_python_code - Python

@data_analysis_ml - анализ данных на Python

@itchannels_telegram - 🔥 главное в ит

РКН: clck.ru/3FmrFd
Download Telegram
🚀 Neo4j без сервера: GraphForge запускает полноценный Cypher прямо внутри Python-скрипта

GraphForge занимает редкую нишу между NetworkX и серверными графовыми БД. Вы получаете встроенный графовый движок на Rust, полный openCypher и хранение проекта в обычной директории.

Что внутри:

- четыре независимых слоя на Rust: parser → IR → planning → execution;
- результаты сразу возвращаются как Apache Arrow Table;
- данные легко передаются в Pandas и Polars;
- постоянное хранение построено на Parquet;
- встроены PageRank, Louvain и гибридный текстово-векторный поиск;
- Python- и Node.js-биндинги работают поверх одного движка.


from graphforge import GraphForge

graph = GraphForge("research/")

result = graph.execute("""
MATCH (a)-[:CITES]->(b)
RETURN a.title, b.title
""")

print(result.to_pandas())


При этом GraphForge честно позиционируется как инструмент исследовательского и notebook-масштаба. Для миллиардных графов, высокой нагрузки и многопользовательского доступа по-прежнему нужна серверная БД.

Python и Node.js доступны сейчас, Swift и Kotlin находятся в планах. Лицензия — Apache 2.0.

https://github.com/CurateLabs/graphforge

#RustLang #Python #OpenSource #GraphDatabase #DataScience #KnowledgeGraph
❤1👍1
⚡️ Как узнать количество CPU в Python одной строкой

Для этого не нужны сторонние библиотеки — всё есть в стандартном multiprocessing:


import multiprocessing

print(multiprocessing.cpu_count())


Например:


8


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

То же самое можно получить через:


import os

print(os.cpu_count())


Это особенно полезно, когда нужно автоматически подобрать количество worker-процессов:


workers = multiprocessing.cpu_count()


Но запускать N workers только потому, что у CPU есть N потоков, не всегда оптимально. Для CPU-bound задач количество процессов обычно подбирают экспериментально, а для I/O-bound архитектура может быть совсем другой.

Маленькая функция, но часто полезна при настройке multiprocessing, worker pools и параллельных вычислений.

#Python #Programming #Multiprocessing #Backend
❤1👍1
Media is too big
VIEW IN TELEGRAM
Главный секрет bool: он на самом деле int
Складываю True и True, получаю 2

Складываешь два True в Python и получаешь 2. Не баг и не магия: bool наследуется от int, поэтому True это единица, а False это ноль. Минута, и ты больше никогда не удивишься sum по списку булевых значений.

#python
👍5❤3🔥3
Forwarded from Just Xor
🐍 Генераторные выражения в Python - один из самых простых способов экономить память.

Обычный list comprehension сразу создаёт весь список:


squares = [x ** 2 for x in range(1_000_000)]


А generator expression вычисляет значения только по мере необходимости:


squares = (x ** 2 for x in range(1_000_000))


То есть миллион элементов не хранится в памяти одновременно.

Можно получать значения по одному:


next(squares)


или передать генератор напрямую в:


sum(...)
max(...)
any(...)
all(...)


Главный плюс - lazy evaluation.

Особенно полезно для:

- больших файлов;
- потоков данных;
- длинных последовательностей;
- ETL-пайплайнов;
- обработки данных, которые не нужно хранить целиком.

Но есть нюанс: генератор одноразовый.

После того как значения закончились, пройти по нему повторно уже нельзя.

Маленький синтаксический приём, который может заметно уменьшить потребление памяти.

#Python #Programming #Backend #DataEngineering
👍10❤3
Знаете ли вы, что в #Python можно делать перегрузку функций с помощью functools?

Вот пример!
👍9🔥5❤1🥰1
🐍 Python: type(x) == str или isinstance(x, str)?

На первый взгляд разницы почти нет. Но она есть.

❌ type(x) == str проверяет только точное совпадение типа.

✅ isinstance(x, str) учитывает ещё и наследников str.

Пример:


class MyString(str):
pass

x = MyString("hello")

print(type(x) == str) # False
print(isinstance(x, str)) # True


Поэтому в большинстве случаев лучше использовать:

isinstance(x, str)

Так код получается гибче и лучше работает с наследованием.

#Python #Programming #BestPractices
👍9😱2❤1🔥1
Media is too big
VIEW IN TELEGRAM
Что нового в Python 3.15? Ленивые импорты, frozendict и JIT быстрее на 12%

Python 3.15 вышел, и в нём много полезного для разработчиков. Ленивые импорты ускоряют запуск, появились frozendict и sentinel, UTF-8 теперь включён по умолчанию, а JIT ускоряет код на 7–12%. Ещё в релизе профилировщик Tachyon, который подключается к живому процессу, новые возможности typing и стабильный ABI для сборок без GIL. Перед обновлением проверьте зависимости и тесты.

Полный разбор: https://uproger.com/python-3-15-chto-novogo/

Видео: https://uproger.com/python-3-15-chto-novogo/

#python #python315 #программирование #разработка #jit
❤3👍3