Python | Вопросы собесов – Telegram
Python | Вопросы собесов
13.6K subscribers
36 photos
3 videos
1 file
1.18K links
Cайт: easyoffer.ru
Реклама: @easyoffer_adv
ВП: @easyoffer_vp

Тесты t.me/+20tRfhrwPpM4NDQy
Задачи t.me/+nsl4meWmhfQwNDVi
Вакансии t.me/+cXGKkrOY2-w3ZTky
Download Telegram
Что такое модуль ?
Спросят с вероятностью 7%

Модуль — это файл с расширением .py, который содержит код. Он может содержать переменные, функции и классы, которые можно использовать в других программах или модулях.

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

Пример:
# Модуль example_module.py

def greet(name):
return f"Привет, {name}!"

def add(x, y):
return x + y

class Person:
def init(self, name):
self.name = name

def say_hello(self):
return f"Привет, меня зовут {self.name}"


Этот код определяет модуль с именем example_module.py, который содержит функции greet() и add(), а также класс Person. После того, как этот модуль был создан, его можно импортировать в другие скрипты с помощью ключевого слова import:
import example_module

print(example_module.greet("Миша")) # Вывод: Привет, Миша!
print(example_module.add(2, 3)) # Вывод: 5

person = example_module.Person("Анна")
print(person.say_hello()) # Вывод: Привет, меня зовут Анна


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

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍203🔥1
Что относится к изменяемым и к неизменяемым типам данных ?
Спросят с вероятностью 17%

Типы данных делятся на изменяемые (mutable) и неизменяемые (immutable) в зависимости от того, можно ли изменять значения объектов этого типа после их создания. Вот общее разделение:

Изменяемые типы данных (Mutable):

1️⃣ Списки (List): Элементы могут быть изменены после его создания. Это значит, что вы можете добавлять, удалять или изменять элементы списка без создания нового списка.

2️⃣ Словари (Dictionary): Элементы могут быть изменены после его создания. Вы можете добавлять, удалять или изменять пары ключ-значение словаря.

3️⃣ Множества (Set): Элементы множества могут быть изменены после его создания. Вы можете добавлять или удалять элементы из множества.

Неизменяемые типы данных (Immutable):

1️⃣ Строки (String): Строки являются неизменяемыми. Вы не можете изменить отдельные символы строки после ее создания.

2️⃣ Кортежи (Tuple): Кортежи также неизменяемы. Вы не можете изменить элементы кортежа после его создания.

3️⃣ Числовые типы (int, float, complex): Числовые типы данных также неизменяемы. Вы не можете изменить значения чисел после их создания.

4️⃣ Неизменяемые версии структур данных: Некоторые библиотеки, такие как collections.namedtuple, предоставляют неизменяемые версии структур данных.

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

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍223
Что такое list comprehension ?
Спросят с вероятностью 17%

List comprehension - это конструкция, которая позволяет создавать списки на основе других последовательностей (например, списков, кортежей, множеств) более компактно и читаемо.

Синтаксис list comprehension выглядит следующим образом:
[выражение for элемент in последовательность if условие]


В расширенной форме:
[выражение for элемент in последовательность]


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

Примеры использования list comprehension:

1️⃣ Создание списка квадратов чисел от 0 до 9:
squares = [x**2 for x in range(10)]


2️⃣ Фильтрация списка, оставляя только четные числа:
even_numbers = [x for x in range(10) if x % 2 == 0]


3️⃣ Преобразование списка строк в список их длин:
strings = ["apple", "banana", "orange"]
lengths = [len(s) for s in strings]

List comprehension делает код более кратким и выразительным, особенно для простых преобразований и фильтраций данных. Однако не следует злоупотреблять им, чтобы избежать снижения читаемости кода.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍214
Что такое args ?
Спросят с вероятностью 7%

Термин "args" обычно используется для обозначения необязательного параметра функции, который позволяет передавать произвольное количество позиционных аргументов в функцию. Он является соглашением об именовании и может быть заменен на любое другое имя, но часто используется именно "args" для означения этого параметра.

Этот необязательный параметр обычно представляет собой кортеж (tuple) аргументов, переданных в функцию. Поскольку функция может принимать произвольное количество аргументов, он позволяет обрабатывать их динамически.

Пример использования:
def sum_values(*args):
total = 0
for num in args:
total += num
return total

result = sum_values(1, 2, 3, 4, 5)
print(result) # Вывод: 15

В этом примере `*args` позволяет функции принимать любое количество аргументов, которые будут представлены в виде кортежа. Функция затем проходит по всем элементам кортежа и суммирует их, возвращая общее значение.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍223
В чем разница между MRO2 и MRO3 ?
Спросят с вероятностью 7%

MRO2 (Method Resolution Order 2) и MRO3 (Method Resolution Order 3) являются алгоритмами разрешения порядка вызова методов в множественном наследовании. Эти алгоритмы используются для определения того, какой метод будет вызван при обращении к методу экземпляра класса, когда этот метод присутствует в нескольких классах, связанных цепочкой наследования.

Основное отличие между MRO2 и MRO3 заключается в том, как они обрабатывают классы, которые имеют одинаковые имена методов в цепочке наследования.

1️⃣ MRO2 (Python 2): В Python 2 использовался алгоритм MRO2, который был основан на алгоритме C3 Linearization. Он приводил к проблемам с алгоритмическими рекурсивными зависимостями в некоторых случаях множественного наследования, особенно когда классы имели сложные структуры наследования.

2️⃣ MRO3 (Python 3): В Python 3 был заменен на более усовершенствованный алгоритм MRO3, который является модифицированным алгоритмом C3 Linearization. Он решает проблемы, связанные с амбигуитетом при разрешении порядка вызова методов в множественном наследовании и обеспечивает более предсказуемое поведение в таких случаях.

Основным преимуществом MRO3 является его способность разрешать конфликты имен методов в множественном наследовании более точно и надежно, что упрощает и смягчает проблемы, связанные с неоднозначностью при определении порядка вызова методов. Это позволяет разработчикам писать более структурированный и надежный код с использованием множественного наследования.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯15👍2🤔2🔥1
Какие есть основные методы HTTP ?
Спросят с вероятностью 13%

Основные методы HTTP, которые широко используются при взаимодействии с веб-серверами, включают следующие:

1️⃣ GET: Запрашивает представление ресурса. GET-запросы обычно используются для получения данных от сервера. Они могут быть кэшированы и остаются в истории браузера. Они ограничены в размере.

2️⃣ POST: Отправляет данные для обработки на сервере. POST-запросы часто используются для отправки данных HTML-формы на сервер для обработки. Они не кэшируются и не остаются в истории браузера. Они могут отправлять большие объемы данных.

3️⃣ PUT: Загружает содержимое запроса на указанный URI. Если ресурс существует, он перезаписывается. Если ресурс не существует, сервер может создать его с использованием предоставленных данных.

4️⃣ DELETE: Удаляет указанный ресурс.

5️⃣ PATCH: Применяет частичные модификации к ресурсу. Обычно используется для обновления ресурса с частичными данными.

6️⃣ HEAD: Запрашивает заголовки, которые будут возвращены, как если бы был сделан запрос GET, но без тела ответа.

7️⃣ OPTIONS: Используется для запроса возможностей и параметров коммуникации для указанного ресурса.

8️⃣ TRACE: Используется для тестирования соединения по маршруту к ресурсу. Он выполняет циклический обход маршрутизации, который включает в себя передачу запроса через все узлы маршрута.

Это основные методы HTTP, но также существуют и другие, менее используемые. Понимание этих методов важно при разработке веб-приложений и работы с веб-серверами.

➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍4🤔1
Что такое аннотации типов ?
Спросят с вероятностью 7%

Аннотации типов- это синтаксическая особенность, которая позволяет указывать типы переменных, аргументов функций и возвращаемых значений функций в коде. Они не влияют на выполнение программы, но могут быть использованы в качестве средства документирования кода и инструмента статического анализа (например, с помощью инструментов статической типизации, таких как mypy).

Пример использования:
def add(x: int, y: int) -> int:
return x + y

result: int = add(5, 3)
print(result) # Вывод: 8


В этом примере x: int и y: int являются аннотациями типов для аргументов функции add, указывающими, что они должны быть целыми числами. Аннотация -> int указывает, что функция add должна возвращать целое число. Аннотации типов не являются обязательными. Однако они могут быть полезны для повышения читаемости кода и облегчения его анализа.

Примеры ответов
Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍9
Что такое ORM ?
Спросят с вероятностью 13%

ORM (Object-Relational Mapping)
- это техника, которая позволяет представить данные из реляционной базы данных в виде объектов в объектно-ориентированном коде. С помощью ORM разработчики могут работать с данными, как если бы они были объектами, а не записями в базе данных, что облегчает работу и повышает производительность.

Вот некоторые ключевые аспекты ORM:

1️⃣ Сопоставление объектов и таблиц: ORM обеспечивает сопоставление между объектами в коде программы и таблицами в базе данных. Каждый класс объекта соответствует таблице в базе данных, а атрибуты класса соответствуют столбцам в этой таблице.

2️⃣ Операции CRUD: ORM позволяет выполнять операции CRUD (Create, Read, Update, Delete) непосредственно с объектами в коде программы, а не писать SQL-запросы вручную. Это делает работу с базой данных более удобной и абстрагирует разработчика от деталей работы с SQL.

3️⃣ Отношения между объектами: ORM позволяет определять отношения между объектами, такие как один-к-одному, один-ко-многим, многие-ко-многим и другие. Это делает моделирование сложных структур данных более удобным и понятным.

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

5️⃣ Производительность: Хорошие ORM-фреймворки обеспечивают оптимизацию запросов и загрузки данных, что позволяет улучшить производительность приложения и сократить время разработки.

Некоторые известные ORM-фреймворки включают SQLAlchemy, Django ORM, Peewee и Pony ORM. Каждый из них имеет свои особенности и преимущества, и выбор зависит от конкретных потребностей и предпочтений проекта.

➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥1
Что такое kwargs ?
Спросят с вероятностью 7%

Термин "kwargs" обычно используется для обозначения необязательного параметра функции, который позволяет передавать произвольное количество именованных аргументов в функцию. Он является соглашением об именовании и может быть заменен на любое другое имя, но часто используется именно "kwargs" для означения этого параметра.

Этот термин представляет собой словарь (dictionary) аргументов, переданных в функцию, где ключи словаря представляют собой имена аргументов, а значения - их значения. Поскольку функция может принимать произвольное количество именованных аргументов, он позволяет обрабатывать их динамически.

Пример использования:
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")

print_info(name="John", age=30, city="New York")

В этом примере **kwargs позволяет функции print_info принимать любое количество именованных аргументов, которые будут представлены в виде словаря. Функция затем проходит по всем элементам словаря и выводит их ключи и значения.

➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍124
Что такое singleton ?
Спросят с вероятностью 13%

Singleton - это паттерн проектирования, который гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к нему.
Основные характеристики singleton:

1️⃣ Одиночный экземпляр: У класса есть только один экземпляр, который создается при первом обращении к нему, а затем повторно используется при последующих вызовах.

2️⃣ Глобальный доступ: Singleton предоставляет глобальную точку доступа к своему экземпляру, что позволяет другим объектам получить доступ к этому экземпляру через общедоступный метод или свойство.

3️⃣ Ленивая инициализация: Экземпляр класса создается только при первом обращении к нему, а не заранее, что позволяет оптимизировать использование ресурсов и избегать ненужного создания объектов.

Пример реализации singleton:
class Singleton:
_instance = None

def new(cls):
if cls._instance is None:
cls._instance = super().new(cls)
return cls._instance

# Использование
s1 = Singleton()
s2 = Singleton()
print(s1 is s2) # Вывод: True, потому что s1 и s2 ссылаются на один и тот же экземпляр класса Singleton


В этом примере метод new переопределяется таким образом, чтобы при первом вызове он создавал новый экземпляр класса, а при последующих вызовах возвращал уже созданный экземпляр. Таким образом, у класса Singleton всегда есть только один экземпляр.

➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍171
Что такое поверхностная копия ?
Спросят с вероятностью 7%

Поверхностная копия (shallow copy) — это создание копии объекта, но только самого верхнего уровня его структуры данных. В отличие от глубокой копии, поверхностная копия не копирует вложенные объекты, а только ссылается на них. Это означает, что если изменить вложенный объект в исходном объекте, то эти изменения будут отражены и в его копии, так как оба объекта будут ссылаться на одни и те же вложенные объекты.

Для создания данной копии можно использовать модуль copy и его функцию copy. Пример:
import copy

original_list = [1, [2, 3], 4]
copied_list = copy.copy(original_list)

original_list[1][0] = 5 # Изменение исходного списка

print(original_list) # Вывод: [1, [5, 3], 4]
print(copied_list) # Вывод: [1, [5, 3], 4]


В этом примере copy создает поверхностную копию original_list в copied_list. При изменении значения элемента вложенного списка в original_list, эти изменения также отражаются в copied_list, так как оба объекта ссылаются на один и тот же вложенный список [2, 3].

➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
5
Какие есть способы написать свой генератор ?
Спросят с вероятностью 7%

Существует несколько способов написания собственных генераторов. Ниже приведены основные из них:

1️⃣ С использованием функции-генератора (generator function):
Этот способ включает определение функции с использованием ключевого слова yield, которое возвращает значение и приостанавливает выполнение функции, сохраняя ее текущее состояние. При следующем вызове функции выполнение продолжается с того же места, где оно остановилось. Пример:
  def my_generator():
yield 1
yield 2
yield 3

gen = my_generator()
print(next(gen)) # Вывод: 1
print(next(gen)) # Вывод: 2
print(next(gen)) # Вывод: 3


2️⃣ С использованием выражения-генератора (generator expression):
Этот способ позволяет создать генератор, используя синтаксис аналогичный списочному выражению, но с круглыми скобками вместо квадратных. Пример:
gen = (x for x in range(3))
print(next(gen)) # Вывод: 0
print(next(gen)) # Вывод: 1
print(next(gen)) # Вывод: 2


3️⃣ С использованием класса-генератора (generator class):
В этом случае создается класс, который реализует метод iter() и использует ключевое слово yield для генерации значений. Пример:
   class MyGenerator:
def iter(self):
yield 1
yield 2
yield 3

gen = MyGenerator()
for value in gen:
print(value)

Каждый из этих способов имеет свои особенности и подходит для разных сценариев использования. Выбор конкретного способа зависит от вашего предпочтения и требований к вашей программе.

➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍182🔥1
Что такое Threading ?
Спросят с вероятностью 13%

Threading - это механизм, который позволяет создавать и управлять параллельными потоками выполнения внутри одного процесса. Поток (thread) - это наименьшая единица обработки внутри процесса, которая может выполняться параллельно с другими потоками.

Основные концепции threading:

1️⃣ Параллельное выполнение: Потоки позволяют выполнять несколько частей кода (потоков) параллельно в пределах одного процесса. Это позволяет эффективно использовать многоядерные процессоры и улучшить производительность программы.

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

3️⃣ Глобальная интерпретаторская блокировка (GIL): Существует GIL, который предотвращает одновременное выполнение нескольких потоков на уровне байткода в одном процессе. Это может ограничивать эффективность потоков для CPU-интенсивных задач, но не мешает параллельному выполнению операций ввода-вывода.

4️⃣ Модуль threading: Существует встроенный модуль threading, который предоставляет высокоуровневый интерфейс для создания и управления потоками. Он обеспечивает классы Thread для создания потоков, а также средства синхронизации, такие как блокировки, условные переменные и семафоры.

Пример использования threading:
import threading

def worker():
print("Hello from thread")

# Создание и запуск потока
t = threading.Thread(target=worker)
t.start()


Этот пример создает новый поток, который выполняет функцию worker, выводящую сообщение "Hello from thread".

➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🤔31
Что такое глубокая копия ?
Спросят с вероятностью 7%

Глубокая копия (deep copy)— это создание копии объекта, включая все вложенные объекты и их содержимое. Во время него создается новый объект, который полностью копирует структуру и значения всех вложенных объектов, включая вложенные списки, словари, множества, кортежи и так далее.

Она особенно полезна, когда у вас есть составной объект (например, список объектов или словарь объектов), и вы хотите создать его полную копию, чтобы избежать воздействия изменений в исходном объекте на его копию и наоборот.

Для создания глубокой копии можно использовать модуль copy и его функцию deepcopy. Пример:
import copy

original_list = [1, [2, 3], 4]
copied_list = copy.deepcopy(original_list)

original_list[1][0] = 5 # Изменение исходного списка

print(original_list) # Вывод: [1, [5, 3], 4]
print(copied_list) # Вывод: [1, [2, 3], 4]


В этом примере deepcopy создает полную глубокую копию original_list в copied_list. Когда мы изменяем значение элемента вложенного списка в original_list, это не отражается в copied_list, так как они ссылаются на разные объекты в памяти.

➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍131
В чем разница сравнение через is и "==" ?
Спросят с вероятностью 13%

Оператор is используется для проверки идентичности объектов, то есть он проверяет, являются ли два объекта одним и тем же объектом в памяти. С другой стороны, оператор == используется для сравнения значений двух объектов, то есть он проверяет, равны ли значения объектов, не обязательно являются ли они одним и тем же объектом в памяти.

Пример:
a = [1, 2, 3]
b = a # Присваиваем переменной b ссылку на тот же объект, что и у переменной a

print(a is b) # Вывод: True, потому что a и b указывают на один и тот же объект в памяти
print(a == b) # Вывод: True, потому что содержимое a и b одинаковое

c = [1, 2, 3]
print(a is c) # Вывод: False, потому что a и c указывают на разные объекты в памяти
print(a == c) # Вывод: True, потому что содержимое a и c одинаковое


В этом примере переменные a и b ссылаются на один и тот же объект в памяти, поэтому оператор is возвращает True, а содержимое переменных a и b одинаковое, поэтому оператор == также возвращает True. С другой стороны, переменная c ссылается на новый объект, который содержит те же значения, что и a, но не является тем же самым объектом, поэтому оператор is возвращает False, хотя оператор == возвращает True, потому что значения объектов одинаковые.

➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍275👾4🔥3🤔1
Что такое итерируемый объект ?
Спросят с вероятностью 7%

Итерируемый объект — это объект, который может быть перебран поэлементно с помощью цикла for или других методов, таких как map(), filter(), sum(), join() и т. д. Он предоставляет возможность последовательно перебирать свои элементы без явного указания индексов.

Объект считается итерируемым, если он реализует метод iter(), который возвращает итератор. Итератором является объект, который реализует метод next(), который возвращает следующий элемент из коллекции. При достижении конца коллекции метод next() вызывает исключение StopIteration, чтобы указать на завершение итерации.

Множество типов данных и структур данных являются итерируемыми, включая списки (list), кортежи (tuple), строки (str), множества (set), словари (dict) и другие.

Пример итерации по списку:
my_list = [1, 2, 3, 4, 5]

for item in my_list:
print(item)


Здесь переменная my_list является итерируемым объектом, и мы можем перебирать ее элементы в цикле for, поочередно присваивая каждый элемент переменной item. Когда все элементы исчерпаны, цикл завершается.

➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17
Что такое мультипроцессинг ?
Спросят с вероятностью 13%

Мультипроцессинг (multiprocessing) - это использование нескольких процессов для выполнения задач параллельно. Модуль multiprocessing предоставляет возможность создания и управления процессами.

Основные концепции мультипроцессинга:

1️⃣ Параллельное выполнение: Мультипроцессинг позволяет запускать несколько процессов одновременно, что позволяет использовать многопроцессорные системы более эффективно и улучшает производительность программы.

2️⃣ Работа с потоками: Каждый процесс в мультипроцессинге имеет свой собственный поток выполнения, независимый от других процессов. Это позволяет избежать проблем с глобальной блокировкой интерпретатора (GIL), которая присутствует в многопоточных приложениях.

3️⃣ Использование ресурсов: Каждый процесс имеет свое собственное пространство памяти и ресурсы, что обеспечивает изоляцию между процессами и предотвращает конфликты доступа к данным.

4️⃣ Модуль multiprocessing: Для работы с мультипроцессингом используется встроенный модуль multiprocessing, который предоставляет API для создания и управления процессами. Он аналогичен модулю threading, но использует отдельные процессы вместо потоков для параллельного выполнения кода.

Пример использования multiprocessing:
import multiprocessing

def worker():
print("Hello from process")

# Создание и запуск процесса
p = multiprocessing.Process(target=worker)
p.start()


Этот пример создает новый процесс, который выполняет функцию worker, выводящую сообщение "Hello from process".

➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
В чем разница между copy() и deepcopy() ?
Спросят с вероятностью 7%

Функции copy() и deepcopy() используются для создания копий объектов, но есть существенная разница в том, как они копируют вложенные объекты.

1️⃣ copy():
- Создает поверхностную копию объекта. Это означает, что копируется только сам объект и его первый уровень вложенных объектов, но не их вложенные объекты.
- Если вы измените вложенные объекты в исходном объекте, эти изменения будут отражены и в его копии, так как они оба будут ссылаться на одни и те же вложенные объекты.
- Используется, когда вам нужна поверхностная копия объекта, и вы уверены, что вложенные объекты не будут изменяться.

2️⃣ deepcopy():
- Создает глубокую копию объекта. Это означает, что копируются как сам объект, так и все его вложенные объекты, рекурсивно, до тех пор, пока не будут скопированы все объекты внутри объекта.
- Глубокая копия полезна, когда вам нужно создать копию объекта, включая все его вложенные объекты, и вы не хотите, чтобы изменения в исходном объекте отражались на его копии и наоборот.
- Однако глубокие копии могут быть более затратными по памяти и времени, особенно если объект содержит много вложенных объектов.

Пример использования copy() и deepcopy():
import copy

original_list = [1, [2, 3], 4]

shallow_copy = copy.copy(original_list)
deep_copy = copy.deepcopy(original_list)

original_list[1][0] = 5 # Изменение вложенного списка

print(original_list) # Вывод: [1, [5, 3], 4]
print(shallow_copy) # Вывод: [1, [5, 3], 4]
print(deep_copy) # Вывод: [1, [2, 3], 4]


В этом примере shallow_copy является поверхностной копией original_list, а deep_copy — глубокой копией. При изменении вложенного списка в original_list это отражается на shallow_copy, но не на deep_copy.

➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍21
Что такое slots ?
Спросят с вероятностью 13%

slots - это механизм, который позволяет явно определить ограниченный набор атрибутов (полей) для экземпляров класса. Обычно атрибуты экземпляров создаются динамически при их присваивании, что может приводить к потреблению памяти, особенно при работе с большим количеством экземпляров класса.

Когда вы определяете slots для класса, то определяете фиксированный набор атрибутов, которые могут существовать для экземпляров этого класса. Это позволяет экономить память и улучшать производительность, особенно в случае, когда у вас есть много экземпляров класса.

Пример:
class MyClass:
slots = ['x', 'y']

def init(self, x, y):
self.x = x
self.y = y

obj = MyClass(10, 20)
print(obj.x) # Вывод: 10
print(obj.y) # Вывод: 20

# Попытка присвоить атрибут, не определенный в slots, вызовет ошибку
# obj.z = 30 # Вызовет AttributeError


В этом примере у класса MyClass есть определение slots, которое ограничивает атрибуты экземпляра класса только x и y. Попытка присвоить значение атрибуту z вызовет ошибку AttributeError.

Важно отметить, что использование slots может иметь смысл только в тех случаях, когда вы уверены, что ограничение набора атрибутов не вызовет проблем в приложении.

➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍124🔥1
Как реализован декоратор ?
Спросят с вероятностью 7%

Декораторы реализованы как функции, которые принимают другую функцию в качестве аргумента и возвращают новую функцию. Это позволяет изменять поведение или добавлять функциональность существующим без изменения их исходного кода. Вот пример простого декоратора:
def my_decorator(func):
def wrapper():
print("Дополнительный код перед вызовом функции")
func()
print("Дополнительный код после вызова функции")
return wrapper

@my_decorator
def say_hello():
print("Привет, мир!")

say_hello()


В этом примере my_decorator является декоратором, который принимает функцию func и возвращает функцию wrapper, которая содержит дополнительный код перед и после вызова функции func. Затем мы используем декоратор @my_decorator, чтобы применить его к функции say_hello.

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

➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥53
В чем разница между процессом и потоком ?
Спросят с вероятностью 7%

Процессы и потоки - это два основных понятия, используемые в многозадачных системах, таких как операционные системы. Они представляют собой способы организации выполнения программного кода. Вот основные различия между ними:

1️⃣ Процесс:
- Представляет собой отдельный экземпляр программы, запущенный в оперативной памяти компьютера.
- У каждого процесса есть собственное адресное пространство памяти, которое оно использует для выполнения своего кода и хранения своих данных.
- Являются изолированными друг от друга, что означает, что изменения, сделанные в одном процессе, не влияют на другие процессы.
- Обычно создаются операционной системой при запуске новой программы.

2️⃣ Поток:
- Представляет собой легковесный подпроцесс внутри процесса.
- Разделяют общее адресное пространство памяти с другими потоками в рамках одного процесса.
- Имеют свой собственный стек вызовов, но разделяют все остальные ресурсы процесса, такие как файловые дескрипторы, переменные и т. д.
- Могут выполняться параллельно в рамках одного процесса, что позволяет использовать многопоточное программирование для увеличения производительности и ресурсоэффективности.

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

➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥42