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%

Можно сделать все значения списка уникальными, преобразовав его в множество (set) и затем обратно в список. Множество автоматически удаляет дубликаты, оставляя только уникальные элементы. Вот как это можно сделать:
my_list = [1, 2, 3, 4, 2, 3, 5]

unique_list = list(set(my_list))

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


В этом примере set(my_list) создает множество уникальных значений из списка my_list, а list(set(my_list)) преобразует это множество обратно в список. Как результат, мы получаем список, содержащий только уникальные значения из исходного списка.

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

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

Метаклассы - это концепция, которая позволяет контролировать создание классов. Классы являются объектами, и они создаются с помощью других классов, которые называются метаклассами. Вот некоторые ключевые моменты о них:

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

2️⃣ Типы и метаклассы: Каждый объект имеет тип, который определяется его классом. Этот класс, определяющий тип объекта, называется метаклассом. По умолчанию для всех классов метаклассом является type.

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

4️⃣ Ключевые методы метакласса: Для создания собственного метакласса обычно определяются методы __new__() и __init__(). Метод __new__() вызывается перед созданием экземпляра класса, а метод __init__() вызывается после создания экземпляра.

Пример создания метакласса:
class MyMeta(type):
    def new(cls, name, bases, dct):
        # Изменяем или расширяем класс
        dct['custom_attribute'] = 'This is a custom attribute'
        return super().new(cls, name, bases, dct)

class MyClass(metaclass=MyMeta):
    pass

obj = MyClass()
print(obj.custom_attribute)  # Вывод: This is a custom attribute


В этом примере MyMeta - это метакласс, который изменяет класс MyClass, добавляя к нему новый атрибут custom_attribute.

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

Мутабельные (изменяемые) и иммутабельные (неизменяемые) типы данных определяются по их способности изменяться после создания.

1️⃣ Иммутабельные типы данных:
- Не могут быть изменены после создания.
- Если вы пытаетесь изменить значение иммутабельного объекта, на самом деле создается новый объект с измененным значением.
- Примеры таких данных включают числа (int, float), строки (str), кортежи (tuple), неизменяемые множества (frozenset) и неизменяемые словари (frozenset).
Пример:
x = 5
x += 1 # Создается новый объект с новым значением


2️⃣ Мутабельные типы данных:
- Могут быть изменены после создания.
- Вы можете изменять значение мутабельного объекта, не создавая новый объект.
- Примеры таких данных включают списки (list), множества (set), словари (dict) и пользовательские объекты.
Пример:
my_list = [1, 2, 3]
my_list.append(4) # Изменяется существующий список


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

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

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

Декоратор property используется для создания вычисляемых атрибутов класса. Он позволяет определить методы getter, setter и deleter для атрибута класса, что обеспечивает более гибкий доступ к данным объекта. Вот как работает каждый из этих методов:

1️⃣ Getter (метод получения):
   - Помеченный декоратором @property, представляет собой метод, который возвращает значение атрибута.
   - Вызывается при обращении к атрибуту без использования скобок или при обращении через свойство.
   
2️⃣ Setter (метод установки):
   - Помеченный декоратором @property.setter, представляет собой метод, который устанавливает значение атрибута.
   - Вызывается при попытке установить новое значение атрибута.
   
3️⃣ Deleter (метод удаления):
   - Помеченный декоратором @property.deleter, представляет собой метод, который удаляет атрибут.
   - Вызывается при использовании оператора del для удаления атрибута.

Вот пример использования property:
class Circle:
    def init(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius
    
    @radius.setter
    def radius(self, value):
        if value <= 0:
            raise ValueError("Радиус должен быть положительным числом")
        self._radius = value
    
    @radius.deleter
    def radius(self):
        del self._radius

# Использование
c = Circle(5)
print(c.radius)  # Вывод: 5
c.radius = 10
print(c.radius)  # Вывод: 10
del c.radius
# print(c.radius)  # Вызовет AttributeError, так как атрибут удален 


В этом примере метод radius() используется как getter, radius.setter используется для установки нового значения атрибуту, а radius.deleter используется для удаления атрибута.

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

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

Замыкание (closure) в программировании — это функция, которая ссылается на свободные переменные в своей области видимости из внешней области видимости, в которой она была создана, даже если эта внешняя область видимости уже завершила свою работу.

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

Пример:
def outer_function(x):
def inner_function(y):
return x + y
return inner_function

closure = outer_function(10) # Создаем замыкание с x = 10

print(closure(5)) # Вывод: 15

В этом примере inner_function является замыканием, потому что она ссылается на переменную x из внешней функции outer_function, даже после того, как outer_function завершила свою работу. Каждый раз, когда мы вызываем closure(5), мы получаем результат сложения x (который был 10) и y (который был передан в замыкание, равный 5), что дает нам 15.

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

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

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

Магические методы - это специальные методы, начинающиеся и заканчивающиеся двумя подчеркиваниями (__), которые предоставляют специальное поведение объектам при использовании встроенных операторов или функций. Они также называются "специальными методами" или "дандер-методами" (от "double underscore").

Магические методы позволяют классам определять, как они должны реагировать на различные операции, такие как сложение (+), вычитание (-), вызов функции (()), получение длины (len()), преобразование в строку (str()) и многое другое.

Вот некоторые примеры магических методов и их предназначение:

- __init__(self, ...): Инициализация объекта. Вызывается при создании нового экземпляра класса.
- __str__(self): Преобразование объекта в строку. Вызывается функцией str() или при использовании объекта в функциях форматирования строк.
- __repr__(self): Представление объекта. Вызывается функцией repr(), а также при использовании объекта в интерактивной оболочке.
- __add__(self, other): Сложение объектов. Вызывается при использовании оператора +.
- __sub__(self, other): Вычитание объектов. Вызывается при использовании оператора -.
- __len__(self): Получение длины объекта. Вызывается функцией len().
- __getitem__(self, key): Получение элемента по индексу или ключу. Вызывается при использовании оператора [].

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

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

🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26
Что такое модуль ?
Спросят с вероятностью 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