Обучающий канал по Python Ссылка для друга - https://t.me/+I7jrAQKR5xAyYTAy По всем вопросам @valentin_mascarov Реклама на бирже - https://telega.in/c/Python_per_month
⚙️ concurrent.futures.ThreadPoolExecutor()
Класс concurrent.futures.ThreadPoolExecutor
из модуля concurrent.futures
позволяет легко создавать и управлять пулом потоков для выполнения задач параллельно. Это особенно полезно для выполнения нескольких операций ввода-вывода или вычислений, которые могут быть распределены между несколькими потоками.
Python Learning 👩💻
❓ Вопрос на собеседовании
Как работает Python GIL (Global Interpreter Lock), почему он существует, и как его влияние можно минимизировать?
Ответ ⬇️
GIL — это механизм, который синхронизирует выполнение потоков в интерпретаторе CPython, позволяя только одному потоку исполнять Python-код в единицу времени, даже на многопроцессорных системах. GIL существует для упрощения управления памятью CPython, так как он делает объектную модель потокобезопасной.
Хотя GIL ограничивает параллелизм в многопоточных задачах, он не влияет на многопроцессные программы. Его влияние можно минимизировать, используя:
• Многопроцессный подход через модуль multiprocessing.
• Вызовы низкоуровневого кода (например, библиотеки C, освобождающие GIL).
• Асинхронное программирование (asyncio) для задач ввода-вывода.
Пример использования ⚙️
import threading
counter = 0
def increment():
global counter
for _ in range(1000000):
counter += 1
threads = [threading.Thread(target=increment) for _ in range(2)]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
print("Итоговый счётчик:", counter) # Результат может быть меньше 2000000 из-за GIL
Узнай свой грейд и зарплату — бесплатно
1. Переходи в бота ШОРТКАТ @shortcut_python_bot
2. Бронируй удобный слот на индивидуальную встречу для тестирования
3. Проходи тест
4. Сразу же на звонке узнаешь свой грейд и з/п в рынке — на основе опыта менторов из бигтеха
Всё просто, даже добавить нечего
Пройти тестирование в ШОРТКАТ ➡️ @shortcut_python_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqxRdUBv
⚡ Новые каналы с вакансиями и стажировками для джунов
Друзья, мы запустили новые каналы, где публикуются все свежие вакансии и стажировки
🔺 ВАКАНСИИ
Горячие вакансии с привлекательными офферами для джуниор разработчиков, аналитиков, дизайнеров и QA-специалистов.
Стажировки для начинающих специалистов в IT независимо от возраста!
Вакансии и стажировки
в крупнейших IT-компаниях мира:
NVidia, Apple, T-банк, Яндекс, Google и т. д.
⚙️ contextlib.nested
Модуль contextlib
в Python позволяет обрабатывать несколько ресурсов с помощью менеджеров контекста более лаконично. Это полезно, когда работа идёт с большим числом файлов или объектов.
Python Learning 👩💻
⌛ Что будет выведено при выполнении кода?
Пояснение ⬇️
Python использует порядок разрешения методов (MRO) для определения, какой метод вызывать. В данном случае класс D наследует от B и C. MRO для класса D: D -> B -> C -> A. Поэтому вызывается метод process из класса B. Код выполняется корректно.
❓ Вопрос на собеседовании
Что такое методическое разрешение (MRO) в Python, как его проверить и зачем оно нужно?
Ответ ⬇️
Методическое разрешение (MRO) определяет порядок, в котором Python ищет методы и атрибуты в иерархии классов при наследовании. MRO важен для работы с множественным наследованием, так как помогает избежать конфликтов и гарантирует корректное разрешение зависимостей.
MRO можно проверить с помощью атрибута __mro__ или функции mro(). Python использует алгоритм C3-линеаризации для вычисления MRO.
Пример использования ⚙️
class A:
def method(self):
print("Метод класса A")
class B(A):
def method(self):
print("Метод класса B")
class C(A):
def method(self):
print("Метод класса C")
class D(B, C):
pass
print(D.__mro__) # (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
d = D()
d.method() # Метод класса B
⌛ Что будет выведено при выполнении кода?
Пояснение ⬇️
Оператор is проверяет, указывают ли обе переменные на один и тот же объект в памяти. Переменные x и y ссылаются на один объект, поэтому x is y возвращает True. Переменная z — новый объект с тем же содержимым, но другой областью в памяти, поэтому x is z возвращает False.
🚀 Хотите создать своего Telegram-бота и ворваться в мир Python-разработки?
👨💻 На бесплатном открытом уроке 16 января вы узнаете, как за 2 часа создать функционального Telegram-бота с нуля:
— Установка и настройка Python-telegram-bot.
— Создание бота: от идеи до реализации.
— Расширение возможностей с дополнительными функциями.
🤖 Представьте, как ваш бот помогает автоматизировать задачи, такие как обработка данных, управление файлами и отправка электронных писем, а также открывает возможности для заработка! Начните путь востребованного разработчика уже сейчас.
👉 Регистрируйтесь на вебинар в преддверии старта курса «Python Developer. Basic» и 🔥 получите скидку на обучение: https://clck.ru/3FjvdB
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
⚙️ uuid.uuid4()
Метод uuid.uuid4()
из модуля uuid
генерирует случайный UUID (универсально уникальный идентификатор), основанный на случайных данных. Это полезно для создания уникальных идентификаторов для объектов.
Python Learning 👩💻
⚙️ os.getpid()
Метод os.getpid()
возвращает идентификатор текущего процесса. Это полезно для отладки и мониторинга выполнения программ.
Python Learning 👩💻
❓ Вопрос на собеседовании
Что такое метаклассы в Python, как они работают, и зачем их использовать?
Ответ ⬇️
Метакласс в Python — это класс, который управляет созданием других классов. Обычно метаклассы используются, если нужно модифицировать или дополнить поведение классов во время их создания. Метакласс контролирует процесс создания класса и может добавлять новые методы, изменять существующие атрибуты или проверять корректность структуры класса.
Метаклассы задаются через ключевое слово metaclass в определении класса. Например, можно создать метакласс, чтобы автоматически добавлять новые методы или атрибуты.
Пример использования ⚙️
# Создаем метакласс
class MyMeta(type):
def __new__(cls, name, bases, dct):
dct['greet'] = lambda self: f"Hello from {name}!"
return super().__new__(cls, name, bases, dct)
# Используем метакласс
class MyClass(metaclass=MyMeta):
pass
obj = MyClass()
print(obj.greet()) # Вывод: Hello from MyClass!
⚙️ weakref.WeakValueDictionary()weakref.WeakValueDictionary
из модуля weakref
создаёт словарь, где значения являются слабой ссылкой на объекты. Это полезно для кэширования данных, которые должны автоматически удаляться, когда больше нет других ссылок на объект.
Python Learning 👩💻
❓ Вопрос на собеседовании
Что такое метаклассы в Python, как они работают, и зачем их использовать?
Ответ ⬇️
Метакласс в Python — это класс, который управляет созданием других классов. Обычно метаклассы используются, если нужно модифицировать или дополнить поведение классов во время их создания. Метакласс контролирует процесс создания класса и может добавлять новые методы, изменять существующие атрибуты или проверять корректность структуры класса.
Метаклассы задаются через ключевое слово metaclass в определении класса. Например, можно создать метакласс, чтобы автоматически добавлять новые методы или атрибуты.
Пример использования ⚙️
# Создаем метакласс
class MyMeta(type):
def __new__(cls, name, bases, dct):
dct['greet'] = lambda self: f"Hello from {name}!"
return super().__new__(cls, name, bases, dct)
# Используем метакласс
class MyClass(metaclass=MyMeta):
pass
obj = MyClass()
print(obj.greet()) # Вывод: Hello from MyClass!
⚙️ inspect.getclosurevars()
Метод inspect.getclosurevars()
из модуля inspect
позволяет извлечь значения замыканий из функции. Это полезно для анализа внутреннего состояния функций с замыканиями.
Python Learning 👩💻
⚙️ shutil.disk_usage()
Метод shutil.disk_usage()
из модуля shutil
предоставляет информацию о месте на диске, включая общий объём, используемое и доступное пространство. Это полезно для мониторинга состояния файловой системы.
Python Learning 👩💻
⚙️ inspect.getmembers()
Метод inspect.getmembers()
из модуля inspect
позволяет получить список всех членов объекта, включая методы, атрибуты и встроенные свойства. Это полезно для анализа структуры классов и объектов во время выполнения.
Python Learning 👩💻
⌛ Что будет выведено при выполнении кода?
Пояснение ⬇️
f-строки – удобный способ отображения информации в нужном формате. Здесь на место {name} подставляется переменная name, а на место {age / 10:.5f} переменная age, деленная на 10. В форматировании указано представление с 5 знаками после запятой.
⚙️ concurrent.futures.as_completed()
Метод concurrent.futures.as_completed()
позволяет обрабатывать завершение асинхронных задач в порядке их завершения. Это полезно для параллельной обработки, где важно начать работу с результатами, как только они готовы.
Python Learning 👩💻
🚫 Антипаттерн недели: Неоптимальная проверка на принадлежность в списке
Использование списков для проверки на принадлежность с оператором in
приводит к линейному времени выполнения, что может быть медленным для больших наборов данных.
✔️ Используйте set
для проверки на принадлежность, чтобы снизить время выполнения до O(1).
Python Learning 👩💻
⚙️ typing.Protocoltyping.Protocol
из модуля typing
используется для определения интерфейсов (протоколов), которые классы должны реализовывать. Это полезно для проверки совместимости типов в статическом анализе.
Python Learning 👩💻
⌛ Что будет выведено при выполнении кода?
Пояснение ⬇️
*args собирает все позиционные аргументы в кортеж (1, 2, 3), а **kwargs собирает именованные аргументы в словарь {'a': 4, 'b': 5}. Код корректен и выводит оба объекта в соответствующем формате.
⚙️ secrets.token_hex()
Метод secrets.token_hex()
используется для генерации безопасных случайных токенов. Это полезно для создания уникальных идентификаторов, паролей или API-ключей.
Python Learning 👩💻
⚙️ pathlib.Path.exists()
Метод pathlib.Path.exists()
используется для проверки существования файла или директории. Это удобный способ работы с файловой системой в Python.
Python Learning 👩💻
LeetCode теперь в Telegram!
LeetCode — это сайт, который позволяет быстро готовиться к техническим собеседованиям по программированию. Там публикуются задачи с собеседований в Google и Microsoft с решениями.
Подписывайтесь: @leetcode
⚙️ traceback.format_exc()
Метод traceback.format_exc()
из модуля traceback
используется для получения форматированной строки трассировки исключения. Это полезно для логирования ошибок или их анализа.
Python Learning 👩💻
Друзья, на связи ваш админ.
Я тут сделал бота для знакомств @tinder. Буду рад, если вы оцените и воспользуетесь. Если буду какие-то замечания, пишите, буду благодарен)
❓ Вопрос на собеседовании
Как работает __getattr__
и __getattribute__
в Python, и в чём между ними разница?
Ответ ⬇️
__getattr__ и __getattribute__ — это специальные методы для управления доступом к атрибутам объекта.
__getattribute__ вызывается для любого обращения к атрибуту объекта.
__getattr__ вызывается только в случае, если атрибут не найден стандартным способом.
Разница: __getattribute__ перехватывает все обращения, а __getattr__ только пропущенные. Это делает __getattr__ безопаснее для использования, так как он не нарушает стандартный процесс получения атрибутов.
Пример использования ⚙️
class MyClass:
def __getattr__(self, name):
return f"Атрибут {name} отсутствует!"
def __getattribute__(self, name):
if name == "special":
return "Это особый атрибут"
return super().__getattribute__(name)
obj = MyClass()
print(obj.special) # Это особый атрибут
print(obj.undefined) # Атрибут undefined отсутствует!
⚡️ В сети начали массово сливать курсы и книги известных онлайн школ
Вот отсортированная база с тонной материала(постепенно пополняется):
БАЗА (4687 видео/книг):
(363 видео, 87 книги) — Python
(415 видео, 68 книги) — Frontend
(143 видео, 33 книги) — ИБ/Хакинг
(352 видео, 89 книги) — С/С++
(343 видео, 87 книги) — Java
(176 видео, 32 книги) — Git
(293 видео, 63 книги) — C#
(174 видео, 91 книги) — DevOps
(167 видео, 53 книги) — PHP
(227 видео, 83 книги) — SQL/БД
(163 видео, 29 книги) — Linux
(107 видео, 43 книги) — СисАналз
(181 видео, 32 книги) — Go
(167 видео, 43 книги) — Kotlin/Swift
(112 видео, 24 книги) — Flutter
(137 видео, 93 книги) — DS/ML
(113 видео, 82 книги) — GameDev
(183 видео, 37 книги) — UI/UX
(129 видео, 73 книги) — QA
(213 видео, 63 книги) — Rust
(121 видео, 24 книги) — Ruby
Скачивать ничего не нужно — все выложили в Telegram
⚙️ asyncio.gather()
Метод asyncio.gather()
из модуля asyncio
позволяет запускать несколько асинхронных задач одновременно и ожидать их завершения. Это удобный инструмент для работы с конкурентным выполнением задач.
Python Learning 👩💻