Python | Готовимся к собесам
441 subscribers
22 photos
133 links
Вопросы с собеседований для позиций Python-разработчиков, тесты, практика от синьора. Читай, чтобы прокачаться перед встречей

Подготовка к собесам для Frontend https://t.me/+Y8231d36XXo5YTk6

Ссылка на для друга https://t.me/+Dn9D2WZCvno5MGZi
Download Telegram
Что должен знать современный Middle Frontend

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

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


👉 Смотреть видео
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Когда использование Python является «правильным выбором» для проекта?

Использование Python может быть правильным выбором для проекта в следующих случаях:

— Когда нужен быстрый прототип или быстрое решение, которое будет работать достаточно быстро без оптимизации производительности.
— Когда нужен простой и понятный синтаксис языка программирования, который позволит быстрее писать код и делать его более читабельным.
— Когда нужен доступ к большому количеству сторонних библиотек и фреймворков в области машинного обучения, науки о данных, веб-разработки и многих других областях.
— Когда необходимо использование «кляузы batteries included», определяющей ысокоуровневый язык программирования с широким спектром интегрированных библиотек и модулей.

Однако Python может не быть оптимальным выбором для тех приложений, где требуется высокая производительность или многоуровневая безопасность. В этих случаях может быть предпочтительнее использование языков, таких как C++, Java, или C#. Ну или Rust


Если знали ответ — поставьте 🔥
Если нет — 🤯

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2❤1
Что такое метод?

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

Например, если у вас есть класс Person с атрибутами name и age, атрибут name будет хранить имя объекта Person, а атрибут age будет хранить возраст. Вы можете определить методы, такие как get_name и get_age, которые могут быть вызваны на экземпляре класса для получения значения хранящихся в атрибутах name и age соответственно.

Вот пример определения класса Person с методами get_name и get_age:

class Person:
def __init__(self, name, age):
self.name = name
self.age = age

def get_name(self):
return
self.name

def get_age(self):
return self.age

Здесь метод init – это конструктор класса, который инициализирует атрибуты name и age, а методы get_name и get_age предоставляют доступ к их значениям.

Кстати, __init__ — это один из дандер-методов, о том, как работать с ними неплохо описано тут:
Руководство по магическим методам в Питоне


Если знали ответ — поставьте 🔥
Если нет — 🤯

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯3🔥1
Есть ли в Python оператор switch-case?

В Python нет прямого оператора switch-case, как в других языках программирования. Однако, начиная с версии Python 3.10, появилась возможность использовать оператор match-case, который является аналогом switch-case в других языках. Он позволяет проверять значения на соответствие определенным шаблонам и выполнять соответствующее действие в зависимости от того, какой шаблон соответствует значению.

Пример использования оператора match-case:

def process_value(value):
match value:
case 1:
print("Value is 1")
case 2 | 3 | 4:
print("Value is 2 or 3 or 4")
case _:
print("Value is not 1 or 2 or 3 or 4")

process_value(1) # output: Value is 1
process_value(3) # output: Value is not 1 or 2
Оператор match-case доступен только в версии Python 3.10 и выше, поэтому если вы используете более старую версию Python, то нужно воспользоваться другими способами для решения задачи, например, использовать условные выражения if-elif-else или словари.


Если знали ответ — поставьте 🔥
Если нет — 🤯

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2🤯1
Как создать свой собственный пакет в Python?

Ответ:
Для создания своего собственного пакета в Python нужно выполнить следующие шаги:

Создать директорию с именем вашего пакета.

Внутри директории создать файл
init.py, который будет пустым, но он необходим, чтобы Python распознал эту директорию как пакет.

Создать необходимые модули и скрипты внутри директории вашего пакета.

Определить файл
setup.py с метаданными вашего пакета и его зависимостями, например:

from setuptools import setup, find_packages
setup(
name='mypackage',
version='1.0',
packages=find_packages(),
install_requires=['numpy', 'scipy']
)

Создать дистрибутив вашего пакета, выполнив команду python
setup.py sdist

Установить свой пакет с помощью pip, выполнив команду pip install dist/mypackage-1.0.tar.gz.

После этого вы можете использовать свой пакет в своих проектах или опубликовать его на Python Package Index (PyPI) для использования другими людьми.


Если знали ответ — поставьте 🔥
Если нет — 🤯

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🔥1
Как передать необязательные или ключевые параметры из одной функции в другую?

В Python для передачи необязательных параметров в функцию используется синтаксис со знаком звездочки (*) и двойной звездочки (**). Вот пример:

def my_function(required_arg, *args, **kwargs):
print(required_arg)
if args:
print(args)
if kwargs:
print(kwargs)

my_function('Hello, world!', 2, 3, 4, my_keyword='some_value')
В этом примере required_arg – обязательный аргумент функции my_function. После этого первого аргумента мы указали символ звездочки (*), чтобы пометить все
следующие аргументы как необязательные. В примере, это args, который преобразуется в кортеж. Далее, мы указали символ двойной звездочки (**), чтобы пометить все
следующие аргументы как необязательные с ключами. Это параметр kwargs, который преобразуется в словарь.
В вызове my_function, мы передаем обязательный аргумент 'Hello, world!', аргументы args – 2, 3, 4, и ключевой параметр my_keyword со значением 'some_value' в kwargs.
Таким образом, эта функция может принимать переменное количество аргументов, как позиционных, так и именованных.


Если знали ответ — поставьте 🔥
Если нет — 🤯

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2🤯1
Что такое магические методы (dunder-методы)?

Ответ:
Магические методы, также известные как “dunder” (double underscore) методы в Python, это специальные методы, которые начинаются и заканчиваются двойным подчеркиванием. Они позволяют определить, как объекты этого класса будут вести себя в различных контекстах, например, при использовании операторов Python, таких как +, -, *, / и т.д., при вызове функций и методов, при сериализации и многое другое.

Некоторые примеры магических методов в Python включают:

init: инициализирует новый экземпляр объекта
str: определяет, как объект будет представлен в строковом формате
add: определяет, что происходит при использовании оператора +
len: определяет, как объект будет представлен при вызове функции len()
getitem: позволяет получать доступ к элементам объекта, как к элементам списка
Магические методы могут быть очень полезными при создании пользовательских классов в Python, так как они позволяют управлять поведением объектов в различных контекстах и создавать более понятный и гибкий код.

# иллюстрация "утиной типизации": мы можем измерять длину у всего, где есть метод len()

class MyClass:
def __len__(self):
print('длина - это смотря как посмотреть')
return 0

myclass = MyClass()
print(len(myclass))


Если знали ответ — поставьте 🔥
Если нет — 🤯

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯2
Python: большая книга примеров [2023]

"Большая книга примеров" предлагает подробное описание языка программирования Python, дополненное материалами из различных интернет-источников. Книга нацелена на то, чтобы помочь читателям понять язык через его описание и примеры использования, и может служить учебным пособием для начинающих.


🔤 Скачать книгу

➡️ Подготовка Python | #книги
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
В чём преимущества массивов numpy по сравнению с (вложенными) списками python?

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

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

Некоторые из основных преимуществ NumPy:

Более оптимизированная память, что позволяет NumPy работать быстрее с большим объемом данных
Встроенные методы для выполнения арифметических операций, таких как сумма и произведение, которые могут работать сразу над всеми элементами массивов.
Возможность выполнять матричные операции и другие векторизованные вычисления.
Простой синтаксис для выполнения операций над массивами.
Возможность конвертировать массивы NumPy в другие формы данных, такие как списки Python или таблицы Pandas.
Eсли вы работаете с массивами данных, над которыми нужно выполнять научные вычисления, то использование NumPy будет более предпочтительным вариантом, чем использование списков Python.


Если знали ответ — поставьте 🔥
Если нет — 🤯

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Python — это императивный или декларативный язык?

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

“Императивный язык” это термин, который относится к классу языков программирования, использующих прямые команды для управления компьютером, в отличие от
декларативных языков. В императивных языках программист явно описывает действия, которые нужно выполнить компьютеру, а не просто описывает желаемый результат. Примеры императивных языков программирования это Java, C, C++, Python и JavaScript.

Декларативный язык – это язык программирования, который назначает техническую реализацию системы или программы для достижения определенной цели, но не указывает конкретных шагов для ее выполнения. Вместо этого вы определяете, какая информация должна быть обработана, а система сама определяет, как решить эту проблему. Примерами декларативных языков являются SQL для работы с базами данных и HTML для создания веб-страниц. Такие языки обычно используются в случаях, когда важнее задать желаемый результат, чем указать, как добиться этого результата


Если знали ответ — поставьте 🔥
Если нет — 🤯

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2🤯2
Что такое виртуальное окружение?

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

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

Например, вы можете создать виртуальное окружение в текущей директории, выполнив следующую команду в терминале:
python3 -m venv myenv
где myenv – имя виртуального окружения.

После создания виртуального окружения вы можете активировать его, выполнив команду (для Unix-системы):
source myenv/bin/activate
или (для Windows):
myenvScriptsactivate

После активации виртуального окружения вы можете устанавливать и использовать пакеты Python без влияния на глобальное окружение вашего компьютера.


Если знали ответ — поставьте 🔥
Если нет — 🤯

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Как получить доступ к модулю, написанному на python из C и наоборот?

Ответ:
Для того чтобы получить доступ к модулю, написанному на Python из C, можно использовать библиотеку Python/C API, которая позволяет вызывать Python функции и работать с объектами Python из C программы. Для того чтобы получить доступ к модулю, сначала нужно получить указатель на объект модуля с помощью функции PyImport_ImportModule(). Затем можно получить указатель на функции или объекты модуля с помощью функции PyObject_GetAttrString().

Например, вот пример кода на C, который вызывает функцию “hello” из модуля “example” на Python:

#include <Python.h>
int main() {
Py_Initialize();
PyObject* module = PyImport_ImportModule("example");
PyObject* func = PyObject_GetAttrString(module, "hello");
PyObject* result = PyObject_CallObject(func, NULL);
printf("Result: %sn", PyUnicode_AsUTF8(result));
Py_DECREF(func);
Py_DECREF(module);
Py_DECREF(result);
Py_Finalize();
return 0;
}

Аналогичным образом можно вызвать функции из библиотек, написанных на C из Python, используя библиотеку ctypes. Например, вот пример кода на Python, который вызывает функцию sqrt из библиотеки math:

from ctypes import cdll
libm = cdll.LoadLibrary('
libm.so')
print(libm.sqrt(4.0))

Здесь мы загружаем библиотеку
libm.so (которая содержит функцию sqrt) и вызываем её с помощью атрибута dot-notation

Если знали ответ — поставьте 🔥
Если нет — 🤯

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Парсинг с помощью Python. Веб-скрапинг в действии [2025]

Если программирование – магия, то веб-скрапинг – настоящее колдовство. Написав простую автоматизированную программу, можно отправлять запросы веб-серверам, получать ответы с данными, а затем анализировать эти данные и извлекать необходимую информацию. Это обновленное третье издание книги не только познакомит вас с веб-скрапингом, но и послужит исчерпывающим руководством по сбору практически любых видов данных в современном Интернете. В части I основное внимание уделено механике веб-скрапинга: как с помощью Python отправлять запросы веб-серверам, обрабатывать ответы и автоматизировать взаимодействие с сайтами. В части II исследуются более конкретные инструменты и приложения, которые пригодятся при любом сценарии веб-скрапинга.


🔤 Скачать книгу

➡️ Подготовка Python | #книги
Please open Telegram to view this post
VIEW IN TELEGRAM
Репозиторий с пошаговыми задачами для старта в Python за 30 дней

Внутри — текстовые уроки для челленджа «30 дней программирования на Python». Разбор тем, задачки, полезные ссылки — всё для тех, кто только делает первые шаги

➡️Ссылка на репозиторий

➡️ Подготовка Python | #репозиторий
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое wheels и eggs? В чём разница?

Ответ:
В Python wheels и eggs – это форматы пакетов для установки и дистрибуции пакетов с помощью утилиты управления пакетами pip.

Eggs был первоначально разработан как формат дистрибуции пакетов для Python, но был заменен wheels. В отличие от wheels, eggs могут содержать .pyc файлы, что может привести к проблемам при установке на другой платформе или версии Python.

Wheels – это новый формат дистрибуции пакетов, который был введен в Python 2.7. Он поддерживается большинством пакетов на PyPI и имеет множество преимуществ, например:

Он не содержит .pyc файлов, что снижает вероятность конфликтов.
Он легко переносится между платформами и версиями Python.
Он поддерживает сжатие библиотек и упрощает установку требований.
В целом, wheels считается более продвинутой и предпочтительной формой дистрибуции пакетов в Python.


Если знали ответ — поставьте 🔥
Если нет — 🤯

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯4
Почему в python нет оптимизации хвостовой рекурсии? Как это реализовать?

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

Вы можете использовать декоратор sys.setrecursionlimit() для установки максимальной глубины стека вызовов. Однако это не рекомендуется, поскольку установка слишком большого лимита может привести к проблемам с производительностью, а слишком маленький лимит – к ошибкам переполнения стека вызовов.

Вот пример того, как можно установить максимальную глубину стека вызовов до 4000:

import sys
sys.setrecursionlimit(4000)
Вы также можете изменить код функции, чтобы использовать итеративный подход вместо хвостовой рекурсии. Один пример такого изменения может выглядеть следующим образом:

def factorial(n):
result = 1
for i in range(1, n+1):
result *= i
return result
это вместо использования рекурсивного подхода с вызовом factorial(n-1) внутри функции factorial(n).

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


Если знали ответ — поставьте 🔥
Если нет — 🤯

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Что такое интернирование строк? Почему это есть в python?

Ответ:
Интернирование строк – это процесс, при котором две или более строковые переменные, содержащие одинаковое значение, ссылаются на один и тот же объект в памяти.

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

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

В Python интернирование строк применяется для строковых констант, которые состоят из символов ASCII и имеют длину не более 20 символов. Это объясняется тем, что длинные строки могут занимать слишком много места в памяти, что может привести к проблемам производительности.

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

Пример кода, который демонстрирует интернирование строк в Python:

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

c = 'hello world'
d = 'hello world'
print(c is d) # False, потому что строка "hello world" длиннее 5 символов и не является интернированной

e = '_123'
f = '_123'
print(e is f) # True, потому что строка содержит только цифры и символ '_'


Если знали ответ — поставьте 🔥
Если нет — 🤯

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯3🔥2
Почему всякий раз, когда python завершает работу, не освобождается вся память?

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

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

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


Если знали ответ — поставьте 🔥
Если нет — 🤯

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯4
Что такое GIL? Почему GIL всё ещё существует?

Ответ:
GIL (Global Interpreter Lock) – это механизм в интерпретаторе CPython , который гарантирует, что только один поток исполнения может выполнять байт-код Python в любой момент времени. Это было добавлено в Python для обеспечения безопасности потоков в многопоточной среде и для упрощения реализации интерпретатора. GIL всё ещё существует, потому что он является важной частью интерпретатора CPython и его логики работы с потоками.

Однако, недавние версии Python имеют некоторые механизмы для обхода ограничений GIL, такие как использование многопроцессных вычислений вместо многопоточных и использование асинхронного
программирования. Кроме того, есть и другие реализации языка Python, такие как Jython и IronPython, которые не используют GIL.

Короче, вопрос насколько GIL ограничивает производительность Python сейчас является спорным и холиварным.

Подробнее о GIL можно почитать тут:
Python — это медленно. Почему?


Если знали ответ — поставьте 🔥
Если нет — 🤯

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2🤯2
Что будет напечатано в результате выполнения следующего кода?

Ответ:

import sys
arr_1 = []
arr_2 = arr_1
print(sys.getrefcount(arr_1))

В результате выполнения данного кода будет напечатано число, равное количеству ссылок на объект arr_1, которые существуют в настоящий момент времени. Так как мы создаем две переменные, arr_1 и arr_2, которые ссылаются на один и тот же пустой список [], то количество ссылок на него будет равно 2.

Поэтому в результате выполнения данного кода будет напечатано число 2. Эта величина может быть немного больше, чем ожидается, из-за внутренней оптимизации CPython, которая добавляет
временные ссылки на объекты.


Если знали ответ — поставьте 🔥
Если нет — 🤯

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2