Спросят с вероятностью 17%
Список (list) и кортеж (tuple) - это две различные структуры данных, которые обладают следующими основными различиями:
1️⃣ Изменяемость:
- Списки изменяемы, что означает, что их элементы могут быть изменены после создания списка.
- Кортежи неизменяемы, их элементы не могут быть изменены после создания кортежа.
2️⃣ Синтаксис:
- Списки создаются с использованием квадратных скобок
[ ], например: [1, 2, 3].- Кортежи создаются с использованием круглых скобок
( ), например: (1, 2, 3).3️⃣ Производительность:
- Кортежи работают быстрее, чем списки, потому что они неизменяемы и Python может проводить оптимизации, которые не доступны для списков.
4️⃣ Использование:
- Списки обычно используются там, где требуется изменяемая коллекция, например, когда вы планируете добавлять, удалять или изменять элементы списка.
- Кортежи обычно используются для представления фиксированных коллекций элементов, которые не должны изменяться, или для передачи неизменяемых последовательностей данных в функции, где изменяемость нежелательна.
Пример использования списков:
my_list = [1, 2, 3]
my_list.append(4)
print(my_list) # Вывод: [1, 2, 3, 4]
Пример использования кортежей:
my_tuple = (1, 2, 3)
# my_tuple[0] = 5 # Это вызовет ошибку, так как кортежи неизменяемы
print(my_tuple) # Вывод: (1, 2, 3)
Если ваши данные должны оставаться неизменными, лучше использовать кортежи. Если вам нужна изменяемость, используйте списки.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥12❤1
Спросят с вероятностью 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)) преобразует это множество обратно в список. Как результат, мы получаем список, содержащий только уникальные значения из исходного списка.Please open Telegram to view this post
VIEW IN TELEGRAM
👍21❤3🔥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🤔7❤2👾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) # Изменяется существующий список
Использование иммутабельных типов данных обычно приводит к более безопасному и предсказуемому поведению программы, так как они не могут быть случайно изменены в процессе выполнения программы. Однако мутабельные типы данных часто более эффективны в использовании, особенно при работе с большими объемами данных, поскольку они позволяют изменять значение объекта без создания нового экземпляра.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23👾2❤1
Спросят с вероятностью 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 используется для удаления атрибута.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.Замыкания являются мощным и полезным инструментом, который может быть использован для создания гибких и эффективных решений в различных ситуациях.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🤯11❤1🤔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): Получение элемента по индексу или ключу. Вызывается при использовании оператора [].И это только несколько из множества магических методов, которые можно определить в классе. Использование магических методов делает классы более интегрированными с языком и позволяет использовать их встроенные функциональности более элегантным и естественным способом.
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()) # Вывод: Привет, меня зовут Анна
Модули представляют собой важный механизм организации кода и его повторного использования, а также обеспечивают удобство и поддерживаемость проекта.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤3🔥1
Спросят с вероятностью 17%
Типы данных делятся на изменяемые (mutable) и неизменяемые (immutable) в зависимости от того, можно ли изменять значения объектов этого типа после их создания. Вот общее разделение:
Изменяемые типы данных (Mutable):
1️⃣ Списки (List): Элементы могут быть изменены после его создания. Это значит, что вы можете добавлять, удалять или изменять элементы списка без создания нового списка.
2️⃣ Словари (Dictionary): Элементы могут быть изменены после его создания. Вы можете добавлять, удалять или изменять пары ключ-значение словаря.
3️⃣ Множества (Set): Элементы множества могут быть изменены после его создания. Вы можете добавлять или удалять элементы из множества.
Неизменяемые типы данных (Immutable):
1️⃣ Строки (String): Строки являются неизменяемыми. Вы не можете изменить отдельные символы строки после ее создания.
2️⃣ Кортежи (Tuple): Кортежи также неизменяемы. Вы не можете изменить элементы кортежа после его создания.
3️⃣ Числовые типы (int, float, complex): Числовые типы данных также неизменяемы. Вы не можете изменить значения чисел после их создания.
4️⃣ Неизменяемые версии структур данных: Некоторые библиотеки, такие как
collections.namedtuple, предоставляют неизменяемые версии структур данных.Изменяемые типы данных могут быть полезны для хранения и изменения коллекций данных, в то время как неизменяемые типы данных обеспечивают безопасность данных и подходят для хранения значений, которые не должны изменяться после создания.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22❤3
Спросят с вероятностью 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 делает код более кратким и выразительным, особенно для простых преобразований и фильтраций данных. Однако не следует злоупотреблять им, чтобы избежать снижения читаемости кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21❤4
Спросят с вероятностью 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` позволяет функции принимать любое количество аргументов, которые будут представлены в виде кортежа. Функция затем проходит по всем элементам кортежа и суммирует их, возвращая общее значение.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22❤3
Спросят с вероятностью 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 является его способность разрешать конфликты имен методов в множественном наследовании более точно и надежно, что упрощает и смягчает проблемы, связанные с неоднозначностью при определении порядка вызова методов. Это позволяет разработчикам писать более структурированный и надежный код с использованием множественного наследования.
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
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 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 должна возвращать целое число. Аннотации типов не являются обязательными. Однако они могут быть полезны для повышения читаемости кода и облегчения его анализа.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
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 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) аргументов, переданных в функцию, где ключи словаря представляют собой имена аргументов, а значения - их значения. Поскольку функция может принимать произвольное количество именованных аргументов, он позволяет обрабатывать их динамически.
Пример использования:
В этом примере
➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 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
👍12❤4
Что такое singleton ?
Спросят с вероятностью 13%
Singleton - это паттерн проектирования, который гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к нему.
Основные характеристики singleton:
1️⃣ Одиночный экземпляр: У класса есть только один экземпляр, который создается при первом обращении к нему, а затем повторно используется при последующих вызовах.
2️⃣ Глобальный доступ: Singleton предоставляет глобальную точку доступа к своему экземпляру, что позволяет другим объектам получить доступ к этому экземпляру через общедоступный метод или свойство.
3️⃣ Ленивая инициализация: Экземпляр класса создается только при первом обращении к нему, а не заранее, что позволяет оптимизировать использование ресурсов и избегать ненужного создания объектов.
Пример реализации singleton:
В этом примере метод
➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 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
👍17❤1
Что такое поверхностная копия ?
Спросят с вероятностью 7%
Поверхностная копия (shallow copy) — это создание копии объекта, но только самого верхнего уровня его структуры данных. В отличие от глубокой копии, поверхностная копия не копирует вложенные объекты, а только ссылается на них. Это означает, что если изменить вложенный объект в исходном объекте, то эти изменения будут отражены и в его копии, так как оба объекта будут ссылаться на одни и те же вложенные объекты.
Для создания данной копии можно использовать модуль
В этом примере
➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 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):
Этот способ включает определение функции с использованием ключевого слова
2️⃣ С использованием выражения-генератора (generator expression):
Этот способ позволяет создать генератор, используя синтаксис аналогичный списочному выражению, но с круглыми скобками вместо квадратных. Пример:
3️⃣ С использованием класса-генератора (generator class):
В этом случае создается класс, который реализует метод
Каждый из этих способов имеет свои особенности и подходит для разных сценариев использования. Выбор конкретного способа зависит от вашего предпочтения и требований к вашей программе.
➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 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
👍18❤2🔥1
Что такое Threading ?
Спросят с вероятностью 13%
Threading - это механизм, который позволяет создавать и управлять параллельными потоками выполнения внутри одного процесса. Поток (thread) - это наименьшая единица обработки внутри процесса, которая может выполняться параллельно с другими потоками.
Основные концепции threading:
1️⃣ Параллельное выполнение: Потоки позволяют выполнять несколько частей кода (потоков) параллельно в пределах одного процесса. Это позволяет эффективно использовать многоядерные процессоры и улучшить производительность программы.
2️⃣ Совместное использование ресурсов: Потоки разделяют общие ресурсы, такие как память или файлы, что может привести к проблемам с синхронизацией доступа к этим ресурсам, поэтому важно использовать механизмы синхронизации, такие как блокировки, для обеспечения безопасного доступа к общим данным из разных потоков.
3️⃣ Глобальная интерпретаторская блокировка (GIL): Существует GIL, который предотвращает одновременное выполнение нескольких потоков на уровне байткода в одном процессе. Это может ограничивать эффективность потоков для CPU-интенсивных задач, но не мешает параллельному выполнению операций ввода-вывода.
4️⃣ Модуль threading: Существует встроенный модуль
Пример использования threading:
Этот пример создает новый поток, который выполняет функцию
➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 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🤔3❤1
Что такое глубокая копия ?
Спросят с вероятностью 7%
Глубокая копия (deep copy)— это создание копии объекта, включая все вложенные объекты и их содержимое. Во время него создается новый объект, который полностью копирует структуру и значения всех вложенных объектов, включая вложенные списки, словари, множества, кортежи и так далее.
Она особенно полезна, когда у вас есть составной объект (например, список объектов или словарь объектов), и вы хотите создать его полную копию, чтобы избежать воздействия изменений в исходном объекте на его копию и наоборот.
Для создания глубокой копии можно использовать модуль
В этом примере
➡️ Примеры ответов
➡️ Список всех вопросов на Python Developer
🧩 Идущий | 🔐 Собесы | 🔐 Тестовые
Спросят с вероятностью 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
👍13❤1