Python вопросы с собеседований
Вопросы с собеседований по Python @workakkk - админ @machinelearning_interview - вопросы с собесдований по Ml @pro_python_code - Python @data_analysis_ml - анализ данных на Python @itchannels_telegram - 🔥 главное в ит РКН: clck.ru/3FmrFd
Mostrar más📈 Análisis del canal de Telegram Python вопросы с собеседований
El canal Python вопросы с собеседований (@python_job_interview) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 24 857 suscriptores, ocupando la posición 5 258 en la categoría Tecnologías y Aplicaciones y el puesto 26 472 en la región Rusia.
📊 Métricas de audiencia y dinámica
Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 24 857 suscriptores.
Según los últimos datos del 25 agosto, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -44, y en las últimas 24 horas de 0, conservando un alto alcance.
- Estado de verificación: No verificado
- Tasa de interacción (ER): El promedio de interacción de la audiencia es 6.01%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 2.76% de reacciones respecto al total de suscriptores.
- Alcance de las publicaciones: Cada publicación recibe en promedio 1 492 visualizaciones. En el primer día suele acumular 684 visualizaciones.
- Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 6.
- Intereses temáticos: El contenido se centra en temas clave como github, api, собеседование, git, docker.
📝 Descripción y política de contenido
El autor describe el recurso como un espacio para expresar opiniones subjetivas:
“Вопросы с собеседований по Python
@workakkk - админ
@machinelearning_interview - вопросы с собесдований по Ml
@pro_python_code - Python
@data_analysis_ml - анализ данных на Python
@itchannels_telegram - 🔥 главное в ит
РКН: clck.ru/3FmrFd”
Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 01 septiembre, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.
>>> myname="John"
>>> Myname
Traceback (most recent call last):
File "", line 1, in
Myname
NameError: name 'Myname' is not defined
Возникновение ошибки NameError означает, что Python чувствителен к регистру.
@python_job_interviewdef f(x,l=[]):
for i in range(x):
l.append(i*i)
print(l)
f(2)
f(3,[3,2,1])
f(3)
Ответ
[0, 1]
[3, 2, 1, 0, 1, 4]
[0, 1, 0, 1, 4]
Почему?
Первый вызов функции волне очевиден, цикл добавляет 0, а затем 1 в пустой список. l – имя переменной которая указывает на список, хранящийся в памяти. Второй вызов начинается с создания нового списка, хранящегося в новом блоке памяти. l ссылается на новый список. Затем добавляются 0, 1 и 4 к новому списку. В третьем вызове функции происходит что-то странное. Она использует исходный список, хранящийся в исходной области памяти. Именно поэтому он начинается с 0 и 1.
Протестируйте следующий код, для понимания:
l_mem = []
l = l_mem # первый вызов
for i in range(2):
l.append(i*i)
print(l) # [0, 1]
l = [3,2,1] # второй вызов
for i in range(3):
l.append(i*i)
print(l) # [3, 2, 1, 0, 1, 4]
l = l_mem # третий вызов
for i in range(3):
l.append(i*i)
print(l) # [0, 1, 0, 1, 4]
@python_job_interviewimport datetime
datetime.datetime.now = lambda: datetime.datetime(2022, 09, 09)
Чаще всего это – довольно плохая идея, предпочтительно такие вещи определять явным способом. Одна из причин применения «монкей патчинга» - тестирование. Пакет mock очень полезен с для этих целей.
Почему это важно?
Это показывает, собеседуемый знаком методологией модульного тестирования. Упоминание о «моней патчинге» покажет, что программист за поддерживаемый программный код (те кто против – менее эффективны). Помните принцип KISS? И это показывает, что вы знакомы, как работает Python на более низком уровне, как функции хранятся, вызываются и прочее.
PS: стоит немного почитать о mock если вы ещё не сделали этого. Это довольно полезно.
@python_job_interviewfind_values([11, 10, 3], [10, 3, 5, 11], [11, 10]) -> [11, 10]
find_values([8, 4, 7, "hi"], [8, "hi"], [4, "hi"]) -> ['hi']
find_values([1, 4, 3], [6, 2, 8], ["4", "hi"]) -> []
➡️Делитесь своим решением в комментариях👇
#задача_с_собеседования
@python_job_interviewimport sqlite3 as sl
Создание соединения с БД
Не беспокойтесь о драйверах, строках подключения и т.д. Вы можете создать базу данных SQLite и задать такой простой объект подключения, как:
con = sl.connect('my-test.db')
После запуска этой строки кода происходит создание с БД и активируется подключение к ней. Дело в том, что базы данных, к которой мы просим подключиться Python, не существует, поэтому он автоматически создает пустую. Также мы можем ввести точно такой же код для подключения к уже существующей базе данных.
Создание таблицы
Теперь создадим таблицу:
with con:
con.execute("""
CREATE TABLE USER (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
);
""")
Мы добавили три столбца в таблицу USER. Как видите, SQLite действительно легка и при этом поддерживает все основные функции обычной реляционной СУБД, такие как тип данных, обнуляемый тип, первичный ключ и автоинкремент.
После запуска этого кода создается таблица, но она ничего не выводит.
Включение записей
Вставим несколько записей в только что созданную таблицу USER, чтобы доказать, что она действительно создана.
Предположим, мы хотим вставить сразу несколько записей. Выполним:
sql = 'INSERT INTO USER (id, name, age) values(?, ?, ?)'
data = [
(1, 'Alice', 21),
(2, 'Bob', 22),
(3, 'Chris', 23)
]
Определяем оператор SQL с вопросительными знаками ? в качестве заполнителя. Теперь создадим образцы данных для вставки, а затем вставим их с помощью объекта подключения:
with con:
con.executemany(sql, data)
После запуска кода не появилось никаких предупреждений, значит все прошло успешно.
Запрос к таблице
Пришло время удостовериться, что все сделано правильно. Выполним запрос к таблице на возврат образцов строк.
with con:
data = con.execute("SELECT * FROM USER WHERE age <= 22")
for row in data:
print(row)
➡️ Читать дальше
@python_job_interviewname = 'Chris'
# 1. f strings
print(f'Hello {name}')
# 2. % operator
print('Hey %s %s' % (name, name))
# 3. format
print(
"My name is {}".format((name))
)
@python_job_interviewdef f1(lIn):
l1 = sorted(lIn)
l2 = [i for i in l1 if i<0.5]
return [i*i for i in l2]
def f2(lIn):
l1 = [i for i in lIn if i<0.5]
l2 = sorted(l1)
return [i*i for i in l2]
def f3(lIn):
l1 = [i*i for i in lIn]
l2 = sorted(l1)
return [i for i in l1 if i<(0.5*0.5)]
То есть на входе все функции имеют одинаковые данные, на выходе выдают одинаковый результат. Но из-за того, что внутри операции выполняются в разном порядке, время выполнения будет отличаться. Здесь нужно ориентироваться в алгоритмах и понимать, что происходит с твоими данными в процессе. Эту задачу может решить Junior, а может не решить и Middle. Казалось бы, такая мелочь, но когда мы работаем с большим количеством данных, важно, чтобы код был оптимизирован и программа выполнялась максимально быстро.
@machinelearning_interview
Ответ
Позволяет снизить объём памяти, потребляемой экземплярами класса, ограничивая количество атрибутов ими поддерживаемых.
По умолчанию классы используют словарь для хранения атрибутов — это позволяет модифицировать набор атрибутов объекта прямо в ходе исполнения программы. Однако такой подход оказывается затратным для объектов, набор атрибутов которых невелик и/или ограничен. Это становится особенно заметно, когда создаётся большое количество экземпляров.
Поведение по умолчанию можно изменить, задав slots при определении класса. В slots могут быть перечислены атрибуты для значений которых требуется зарезервировать место (с точки зрения CPython в объекте класса резервируется место для массива указателей на Python-объекты). При этом ни dict, ни weakref для экземпляров автоматически созданы не будут (даже если в качестве значения строки указать пустую строку).
В качестве значения slots может быть указана строка, объект поддерживающий итерирование, или последовательность строк с именами атрибутов, использующихся экземплярами.
Слоты реализуются при помощи создания дескриптора для каждого из перечисленных атрибутов.
class Ordinary(object):
"""Экземпляры этого класса могут дополняться атрибутами
во время исполнения.
"""
class WithSlots(object):
__slots__ = 'static_attr'
a = Ordinary()
b = WithSlots()
a.__dict__ # {}
b.__dict__ # AttributeError
a.__weakref__ # None
b.__weakref__ # AttributeError
a.static_attr = 1
b.static_attr = 1
a.dynamic_attr = 2
b.dynamic_attr = 2 # AttributeError
Попытки присвоить экземпляру атрибут, который не был перечислен в slots будет поднято исключение AttributeError.
2.3 Если требуется динамическое назначение атрибутов, следует указать в перечислении слотов '__dict__'.
Не имея атрибута weakref, экземпляры классов со slots не поддерживают слабые ссылки на себя.
2.3 Если требуется поддержка слабых ссылок, следует указать в перечислении слотов '__weakref__'.
Область действия слотов ограничено классом, в котором они определены, поэтому наследники (если конечно они не определили собственные слоты) будут иметь dict.
Если наследники тоже определяют слоты, то в перечислении должны содержаться лишь дополнительные. В последующих версиях возможно будет реализована проверка на совпадение имён.
Непустой slots не может быть использован для классов, наследующихся от встроенных типов переменной длины, например long, str и кортеж. При попытке сделать это будет поднято исключение TypeError.
Слот может принимать перечисления с «нестроками». Например, могут использоваться отображения, однако в будущих версиях значения по ключам могут быть наделены неким определённым смыслом.
2.6 Если назначается class, следует проследить, что для обоих классов определены одинаковые слоты.
@python_job_interview