Что такое GIL? Почему GIL всё ещё существует?
Ответ:
Если знали ответ — поставьте 🔥
Если нет — 🤯
➡️ Подготовка Python | #вопросы
Ответ:
GIL (Global Interpreter Lock) – это механизм в интерпретаторе CPython , который гарантирует, что только один поток исполнения может выполнять байт-код Python в любой момент времени. Это было добавлено в Python для обеспечения безопасности потоков в многопоточной среде и для упрощения реализации интерпретатора. GIL всё ещё существует, потому что он является важной частью интерпретатора CPython и его логики работы с потоками.
Однако, недавние версии Python имеют некоторые механизмы для обхода ограничений GIL, такие как использование многопроцессных вычислений вместо многопоточных и использование асинхронного
программирования. Кроме того, есть и другие реализации языка Python, такие как Jython и IronPython, которые не используют GIL.
Короче, вопрос насколько GIL ограничивает производительность Python сейчас является спорным и холиварным.
Подробнее о GIL можно почитать тут:Python — это медленно. Почему?
Если знали ответ — поставьте 🔥
Если нет — 🤯
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2🤯2
Что будет напечатано в результате выполнения следующего кода?
Ответ:
Если знали ответ — поставьте 🔥
Если нет — 🤯
➡️ Подготовка Python | #вопросы
Ответ:
import sys
arr_1 = []
arr_2 = arr_1
print(sys.getrefcount(arr_1))
В результате выполнения данного кода будет напечатано число, равное количеству ссылок на объект arr_1, которые существуют в настоящий момент времени. Так как мы создаем две переменные, arr_1 и arr_2, которые ссылаются на один и тот же пустой список [], то количество ссылок на него будет равно 2.
Поэтому в результате выполнения данного кода будет напечатано число 2. Эта величина может быть немного больше, чем ожидается, из-за внутренней оптимизации CPython, которая добавляет
временные ссылки на объекты.
Если знали ответ — поставьте 🔥
Если нет — 🤯
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Что такое MRO? Как это работает?
Ответ:
Если знали ответ — поставьте 🔥
Если нет — 🤯
➡️ Подготовка Python | #вопросы
Ответ:
MRO (Method Resolution Order) – это порядок разрешения методов, который используется в языке программирования Python при наследовании классов.
Когда вызывается метод на экземпляре класса, Python ищет этот метод в самом классе, а затем в его родительских классах в порядке, определенном в MRO. Таким образом, MRO управляет тем, как Python ищет методы, которые были унаследованы из нескольких родительских классов.
Порядок MRO может быть определен несколькими способами, но в общем случае MRO определяется с помощью алгоритма C3, который гарантирует, что порядок разрешения методов будет соблюдать локальный порядок наследования каждого класса и не создавать циклов в определении этого порядка.
Например, если класс A наследуется от классов B и C, а класс B наследуется от класса D, а класс C наследуется от класса E, то MRO для класса A будет определен как [A, B, D, C, E, object].
Это означает, что если существует метод, определенный в классе A и в одном из его родительских классов, то метод из класса A будет вызван, а не из его родительских классов.
Если знали ответ — поставьте 🔥
Если нет — 🤯
Please open Telegram to view this post
VIEW IN TELEGRAM
Когда будет выполнена ветка else в конструкции try…except…else?
Ответ:
Если знали ответ — поставьте 🔥
Если нет — 🤯
➡️ Подготовка Python | #вопросы
Ответ:
Ветка else в конструкции try ... except ... else будет выполнена только в том случае, если исключения не было возбуждено в блоке try.
Если в блоке try произошло исключение, то выполнение программы переходит к соответствующему блоку except, и ветка else пропускается. Если блок except не указан, то исключение будет
возбуждено дальше, а программа завершится с сообщением об ошибке.
a, b = map(int, input().split())
try:
print(a / b)
except:
print('Ошибка')
else:
print('Ошибки не было') # это выводится для любых чисел a, b, если b != 0
Если знали ответ — поставьте 🔥
Если нет — 🤯
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Python — отличный инструмент, прежде всего из-за множества библиотек для работы с данными. Эта книга объединяет подробные описания таких библиотек, как IPython, NumPy, pandas, Matplotlib и Scikit-Learn.
Специалисты по обработке данных найдут здесь решения для обработки, преобразования и визуализации данных, а также для разработки статистических и машинных моделей. Книга является идеальным справочником по научным вычислениям в Python.
Please open Telegram to view this post
VIEW IN TELEGRAM
Каким будет результат следующего выражения?
Если знали ответ — поставьте 🔥
Если нет — 🤯
➡️ Подготовка Python | #вопросы
len(' '.join(list(map(str, [0, 1]))))Внутреннее выражение map(str, [[0], [1]]) преобразует целые значения 0 и 1 в строки, в результате чего получается ['0', '1'].
Затем функция списка преобразует этот итератор в список.
Метод соединения соединяет элементы списка пробелом, в результате чего получается строка "0 1".
Наконец, функция len возвращает длину этой строки, которая равна 3. Вот и всё.
Если знали ответ — поставьте 🔥
Если нет — 🤯
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯1
Как перезагрузить импортированный модуль?
Чтобы перезагрузить импортированный модуль в Python, вы можете использовать функцию reload() из модуля importlib.
Вот как это сделать:
from importlib import reload
import module_name
reload(module_name)
Замените module_name на фактическое имя модуля, который вы хотите перезагрузить.
Это может быть полезно при разработке и тестировании модулей, но не рекомендуется использовать в производственном коде без серьезных причин.
Если знали ответ — поставьте 🔥
Если нет — 🤯
➡️ Подготовка Python | #вопросы
Вот как это сделать:
from importlib import reload
import module_name
reload(module_name)
Замените module_name на фактическое имя модуля, который вы хотите перезагрузить.
Это может быть полезно при разработке и тестировании модулей, но не рекомендуется использовать в производственном коде без серьезных причин.
Если знали ответ — поставьте 🔥
Если нет — 🤯
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2🤯2
Как создать класс без слова class?
Kласс можно создать без использования ключевого слова class, используя типы type или metaclass.
Например, следующий код определяет класс MyClass без использования ключевого слова class:
MyClass = type('MyClass', (), {'x': 42, 'foo': lambda self: self.x})
Этот код эквивалентен определению класса с использованием ключевого слова class:
class MyClass:
x = 42
def foo(self):
return self.x
Оба определения класса эквивалентны и создают объект класса MyClass. Но, честно, использование ключевого слова class читабельнее, хотя где-нибудь может пригодиться и type с metaclass.
Если знали ответ — поставьте 🔥
Если нет — 🤯
➡️ Подготовка Python | #вопросы
Например, следующий код определяет класс MyClass без использования ключевого слова class:
MyClass = type('MyClass', (), {'x': 42, 'foo': lambda self: self.x})
Этот код эквивалентен определению класса с использованием ключевого слова class:
class MyClass:
x = 42
def foo(self):
return self.x
Оба определения класса эквивалентны и создают объект класса MyClass. Но, честно, использование ключевого слова class читабельнее, хотя где-нибудь может пригодиться и type с metaclass.
Если знали ответ — поставьте 🔥
Если нет — 🤯
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯3
Каким будет результат следующего выражения?
Ответ:
Если знали ответ — поставьте 🔥
Если нет — 🤯
➡️ Подготовка Python | #вопросы
Ответ:
Супер простой вопрос, но, согласитесь, ошибиться возможно.
[0, 1][10:]
Выражение [0, 1][10:] возвращает пустой список [], так как срез [10:] означает извлечение элементов начиная с индекса 10 и до конца списка [0, 1], но таких элементов нет.
Если знали ответ — поставьте 🔥
Если нет — 🤯
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2🤯1
Как итерировать словарь по парам ключ-значение
Ответ:
Метод словаря .items() возвращает генератор кортежей (key, value).
Если знали ответ — поставьте 🔥
Если нет — 🤯
➡️ Подготовка Python | #вопросы
Ответ:
Если знали ответ — поставьте 🔥
Если нет — 🤯
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2