Тогда тебе точно будут полезны эти каналы:
БИГТЕХ – стажировки и вакансии
Young & Junior - вакансии IT
Young Стажёр - стажировки ИТ
Junojobs
Макс из < codereview />
Помни! Твои скиллы достойны лучшего оффера.
Подпишись на эти каналы и рекрутеры однозначно заметят тебя.
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет код?
Anonymous Quiz
61%
[0, 0, 0, 0, 0, 0]
18%
[0, 1, 2, 3, 4, 5]
4%
[1, 2, 3, 4, 5, 6]
4%
None
14%
Ошибку
Зачем нужно ключевое слово
Пример:
yield в Python?yield используется для создания генераторов, которые возвращают данные по мере запроса, вместо хранения всего результата в памяти.Пример:
def count_up_to(n):
count = 1
while count <= n:
yield count # Возвращает значение и приостанавливает выполнение
count += 1
for num in count_up_to(5):
print(num)
yield позволяет приостанавливать и возобновлять выполнение функции, экономя память и упрощая работу с потоками данных.🐍 GIL в Python: как это влияет на многопоточность
Global Interpreter Lock (GIL) — это механизм в CPython, который ограничивает выполнение Python-кода одним потоком за раз, даже на многопроцессорных системах.
🔹 Зачем нужен GIL?
Он предотвращает проблемы с управлением памятью и упрощает работу интерпретатора. Однако из-за него многопоточные программы не могут эффективно использовать несколько ядер процессора.
🔹 Когда GIL мешает?
✅ Решение:
Если нужна настоящая параллельность, используйте многопроцессорность (
Global Interpreter Lock (GIL) — это механизм в CPython, который ограничивает выполнение Python-кода одним потоком за раз, даже на многопроцессорных системах.
🔹 Зачем нужен GIL?
Он предотвращает проблемы с управлением памятью и упрощает работу интерпретатора. Однако из-за него многопоточные программы не могут эффективно использовать несколько ядер процессора.
🔹 Когда GIL мешает?
• В CPU-интенсивных задачах (например, обработка данных, вычисления) многопоточность не дает прироста производительности.• В I/O-интенсивных задачах (сетевые запросы, работа с файлами) GIL почти не влияет, так как потоки могут освобождать блокировку во время ожидания операций ввода-вывода.✅ Решение:
Если нужна настоящая параллельность, используйте многопроцессорность (
multiprocessing), которая запускает отдельные процессы без GIL, или попробуйте альтернативные реализации Python, такие как Jython или PyPy.🔥 Mutable vs Immutable в Python
В Python все данные — это объекты, и они делятся на изменяемые (mutable) и неизменяемые (immutable).
🔹 Неизменяемые (immutable): нельзя изменить после создания
✅
🔹 Изменяемые (mutable): можно изменять без создания нового объекта
✅
⚠️ Важный нюанс
Передача изменяемых объектов в функцию может привести к неожиданным изменениям:
✅ Вывод:
В Python все данные — это объекты, и они делятся на изменяемые (mutable) и неизменяемые (immutable).
🔹 Неизменяемые (immutable): нельзя изменить после создания
✅
int, float, str, tuple, frozensetx = "hello"
x += " world" # Создается новый объект, а не изменяется старый
🔹 Изменяемые (mutable): можно изменять без создания нового объекта
✅
list, dict, set, bytearraylst = [1, 2, 3]
lst.append(4) # Список изменяется в той же области памяти
⚠️ Важный нюанс
Передача изменяемых объектов в функцию может привести к неожиданным изменениям:
def modify_list(lst):
lst.append(99) # Изменяет оригинальный список!
my_list = [1, 2, 3]
modify_list(my_list)
print(my_list) # [1, 2, 3, 99]
✅ Вывод:
• Используйте tuple, если данные не должны изменяться.• Будьте осторожны с изменяемыми объектами при передаче в функции.• Если нужно копирование, используйте .copy() или deepcopy().Что выведет код:
Anonymous Quiz
61%
1, 2, 3
16%
1, 2, StopIteration
4%
1, 2, None
18%
Ошибка выполнения
🔥
🔹
🔹
✅ Используйте
*args и **kwargs в Python🔹
*args — передает позиционные аргументы как кортеж:def add_numbers(*args):
return sum(args)
print(add_numbers(1, 2, 3)) # 6
🔹
**kwargs — передает именованные аргументы как словарь:def greet(**kwargs):
print(kwargs)
greet(name="Alice", age=25) # {'name': 'Alice', 'age': 25}
✅ Используйте
*args для списка значений и **kwargs для гибких параметров!