Python собеседования
1.95K subscribers
340 photos
453 links
Подготовка к собеседованиям на позицию Python-разработчик

Еще больше на сайте https://frontview-it.ru

Backend - @frontview_backend
Python работа - @frontview_python_vacancies
Все IT вакансии - @frontview_all_vacancies
Download Telegram
▶️ Паттерн Adapter позволяет объектам с несовместимыми интерфейсами работать вместе, оборачивая один из объектов адаптером. Адаптер преобразует интерфейс одного класса в интерфейс, ожидаемый клиентом.


class EuropeanSocket:
def voltage(self):
return 230

class USASocket:
def voltage(self):
return 120

class Adapter:
def __init__(self, socket):
self.socket = socket

def voltage(self):
return self.socket.voltage()

european_socket = EuropeanSocket()
adapter = Adapter(european_socket)
print(adapter.voltage()) # Использование адаптера для получения напряжения


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍172
Оптимизация кода — это процесс улучшения кода для повышения его эффективности, производительности и уменьшения использования ресурсов. Она необходима для ускорения выполнения программ, снижения потребления памяти и улучшения общей производительности приложений.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3🤔1
✔️ Оператор pass используется как заглушка, когда синтаксис требует наличие кода, но логика ещё не реализована. Он позволяет избежать синтаксических ошибок в пустых конструкциях, таких как функции, циклы или классы.


def unfinished_function():
pass # Заглушка для будущей реализации

class EmptyClass:
pass # Заглушка для пустого класса

for _ in range(5):
pass # Заглушка в цикле


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍161
Декораторы позволяют изменять поведение функции, не меняя её код. Для создания декоратора используется функция, которая принимает другую функцию и возвращает новую функцию с изменённым поведением.


def my_decorator(func):
def wrapper(*args, **kwargs):
print("Действие до вызова функции")
result = func(*args, **kwargs)
print("Действие после вызова функции")
return result
return wrapper


Здесь my_decorator — это декоратор, который добавляет действия до и после вызова функции. wrapper — обёртка, которая выполняет эти действия и вызывает исходную функцию.


@my_decorator
def say_hello(name):
print(f"Hello, {name}!")


При вызове say_hello("World") будет выведено:


Действие до вызова функции
Hello, World!
Действие после вызова функции


Декораторы полезны для логирования, проверки прав доступа, кэширования и других задач.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍142
Функция super() используется для вызова методов родительского класса в наследуемом классе. Она позволяет избежать явного указания имени родительского класса и упрощает поддержку кода при изменении иерархии наследования.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10💯1
Шаг в функции range() задаётся третьим аргументом. По умолчанию шаг равен 1, но его можно изменить на любое целое число, включая отрицательные значения для обратного порядка.


for i in range(0, 10, 2):
print(i)


В этом примере вывод будет:


0
2
4
6
8


Здесь range(0, 10, 2) создаёт последовательность от 0 до 10 с шагом 2. Если шаг отрицательный, последовательность будет идти в обратном порядке:


for i in range(10, 0, -2):
print(i)


Вывод:


10
8
6
4
2


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥5
➡️ Вложенные циклы — это циклы, расположенные внутри других циклов. Каждый раз, когда выполняется одна итерация внешнего цикла, внутренний цикл выполняется полностью.


for i in range(3):
for j in range(2):
print(i, j)


Внешний цикл выполняется три раза, а внутренний — два раза для каждой итерации внешнего. Результат:


0 0
0 1
1 0
1 1
2 0
2 1


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

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥1
Конструкция try-except-else используется для обработки исключений. Блок try выполняет код, который может вызвать ошибку, except перехватывает исключение, а else выполняется, если исключение не возникло.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥2
Метод __eq__() определяет поведение оператора сравнения == для объектов класса. Он принимает два аргумента: self (текущий объект) и other (объект для сравнения), и возвращает True или False.


class Point:
def __init__(self, x, y):
self.x = x
self.y = y

def __eq__(self, other):
return self.x == other.x and self.y == other.y


Здесь метод __eq__() сравнивает координаты двух точек. Если они равны, возвращается True, иначе — False.

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

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍171
🛑 Логические операторы and, or, not используются для работы с булевыми значениями.

- and возвращает True, если оба операнда истинны. Если первый операнд ложный, возвращается его значение без вычисления второго.
- or возвращает True, если хотя бы один операнд истинный. Если первый операнд истинный, возвращается его значение без вычисления второго.
- not инвертирует значение: True становится False, и наоборот.


a = True
b = False

print(a and b) # False, так как b ложно
print(a or b) # True, так как a истинно
print(not a) # False, инвертирует True


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

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍122
➡️ Функция dir() возвращает список атрибутов и методов объекта. Если аргумент не передан, она возвращает имена в текущей локальной области видимости.


import math

print(dir(math)) # Список всех атрибутов и методов модуля math
print(dir()) # Список имен в текущей локальной области видимости


dir() полезен для интроспекции, чтобы узнать, какие методы и атрибуты доступны для объекта или модуля. Это часто используется при изучении новых библиотек или для отладки.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥2
Кортеж — это неизменяемая последовательность элементов, которая часто используется для хранения данных, не требующих изменений. В отличие от списка, кортеж занимает меньше памяти и не поддерживает добавление, удаление или изменение элементов после создания.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2
✔️ Декоратор для класса позволяет изменить или расширить его поведение. Декоратор принимает класс как аргумент, модифицирует его и возвращает измененную версию.


def add_method(cls):
def new_method(self):
return "New method added"
cls.new_method = new_method
return cls

@add_method
class MyClass:
pass

obj = MyClass()
print(obj.new_method()) # Вывод: New method added


В этом примере декоратор add_method добавляет новый метод new_method в класс MyClass. Декораторы для классов полезны для добавления функциональности без изменения исходного кода класса.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍141
Для чтения файла в формате CSV используется модуль csv. С помощью метода reader можно построчно прочитать данные, а метод DictReader позволяет работать с CSV как со списком словарей, где ключи — это заголовки столбцов.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2👀1
😎Использование параметров в SQL-запросах — один из ключевых способов предотвращения SQL-инъекций. Вместо вставки пользовательских данных напрямую в запрос, данные передаются через параметры, что исключает возможность выполнения вредоносного кода.


import sqlite3

# Подключение к базе данных
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# Пользовательский ввод
user_id = '1 OR 1=1'

# Безопасный запрос с использованием параметров
query = "SELECT * FROM users WHERE id = ?"
cursor.execute(query, (user_id,))

# Получение результата
result = cursor.fetchall()


В этом примере данные из переменной user_id передаются в запрос через параметр ?. Даже если в user_id будет вредоносный код, он не выполнится, так как интерпретируется как строка, а не часть SQL-запроса.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2
Django ORM — это инструмент для работы с базой данных, который позволяет взаимодействовать с ней через Python-код, не используя SQL напрямую. Он автоматически преобразует операции с объектами Python в SQL-запросы, упрощая управление данными и обеспечивая безопасность от SQL-инъекций.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥3
👉 Абстрактный класс — это класс, который не предназначен для создания экземпляров, а служит шаблоном для других классов. Он может содержать абстрактные методы (без реализации), которые должны быть переопределены в дочерних классах.


from abc import ABC, abstractmethod

class Animal(ABC):
@abstractmethod
def make_sound(self):
pass

class Dog(Animal):
def make_sound(self):
return "Woof!"

# Animal нельзя создать, Dog — можно
dog = Dog()
print(dog.make_sound()) # Вывод: Woof!


Абстрактный класс создается с использованием модуля abc. Класс наследуется от ABC, а методы помечаются декоратором @abstractmethod. Дочерние классы обязаны реализовать абстрактные методы.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍111
Метод __hash__() используется для получения хэш-значения объекта. Хэш — это целое число, которое уникально идентифицирует объект во время его жизни (если объект неизменяемый). Хэширование позволяет объектам быть ключами в словарях или элементами множеств.

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

Пример реализации для пользовательского класса:


class Point:
def __init__(self, x, y):
self.x = x
self.y = y

def __hash__(self):
return hash((self.x, self.y))


Здесь хэш объекта Point вычисляется на основе кортежа из координат x и y. Это гарантирует, что объекты с одинаковыми координатами будут иметь одинаковый хэш. Если объект изменяемый, переопределять __hash__ не рекомендуется.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9💯1
Функция str() преобразует переданный объект в строковое представление, вызывая его метод __str__(). Она используется для получения читаемого текстового описания объекта, например, для вывода на экран или логирования.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
🛑Локальная область видимости в Python ограничена функцией или блоком кода, где переменная определена. Переменные, созданные внутри функции, доступны только в этой функции и не видны за её пределами. При завершении функции локальные переменные уничтожаются.

Пример:


def example():
x = 10 # x — локальная переменная
print(x)

example()
print(x) # Ошибка: x не определена в глобальной области


Локальные переменные имеют приоритет над глобальными, если имена совпадают. Для изменения глобальной переменной внутри функции используется ключевое слово global.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥3