Обучающий канал по Python Ссылка для друга - https://t.me/+I7jrAQKR5xAyYTAy По всем вопросам @valentin_mascarov Реклама на бирже - https://telega.in/c/Python_per_month
🚫 Антипаттерн недели: Использование range(len())
вместо enumerate()
В Python часто используют range(len(lst))
для итерации по списку с индексами, но это снижает читаемость кода и не является идиоматичным способом перебора элементов.
✔️ Используйте enumerate()
, который позволяет одновременно получать индекс и значение элемента, делая код более читаемым и питоничным.
Python Learning 👩💻
⚙️ __slots__
Метод __slots__
позволяет явно указать, какие атрибуты может иметь объект класса, что значительно уменьшает потребление памяти и ускоряет доступ к атрибутам. Это особенно полезно при создании большого количества экземпляров класса.
Python Learning 👩💻
⌛ Что будет выведено при выполнении кода?
Пояснение ⬇️
Функция map применяет лямбда-функцию lambda x: x ** 2 к каждому элементу списка numbers, возводя его в квадрат. Возвращается объект map, который преобразуется в список с помощью list(squared). Код выполняется корректно.
⚙️ 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
в Python, и когда его стоит использовать?
Ответ ⬇️
Модуль weakref позволяет создавать слабые ссылки на объекты, которые не предотвращают их сборку мусора. Это полезно, когда нужно отслеживать объекты без продления их времени жизни, например, в кешах или при управлении зависимостями в больших структурах данных.
Пример использования ⚙️
import weakref
class Data:
def __del__(self):
print("Объект удалён")
obj = Data()
weak_ref = weakref.ref(obj)
print(weak_ref()) # <__main__.Data object at 0x...>
del obj
print(weak_ref()) # None (объект удалён)
Если бы вы купили TRUMP coin на старте на 1000$, то уже сейчас у вас бы было 130.000$
Только вдумайтесь: Утром покупаете монет на 1000$, а уже через день 1000$ превратилась в 130.000$. Неплохо, правда?
Чтобы быть в тренде – достаточно читать Максима Гусева
Там рассказывают кейсы, как с 1000$ колотят состояние, а не просирают все.
Если хотите разбираться в мире крипты, вам сюда: /channel/+fxR-tkBeKItjZjM6
⚙️ itertools.permutations()
Метод itertools.permutations()
генерирует все возможные перестановки элементов заданной последовательности. Это полезно для задач, связанных с комбинаторикой.
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. Буду рад, если вы оцените и воспользуетесь. Если буду какие-то замечания, пишите, буду благодарен)