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

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

Ссылка на для друга https://t.me/+Dn9D2WZCvno5MGZi
Download Telegram
Что такое файлы .pth?

Файлы с расширением .pth – это файлы, которые могут быть использованы для добавления директорий в путь поиска модулей Python. Директивы .pth выполняются при запуске интерпретатора Python и добавляют определенные каталоги в переменную sys.path. Это удобно, когда нужно импортировать модули из нестандартных директорий без необходимости переноса файлов в директории по умолчанию. Использование директив .pth достаточно распространено в мире Python и они встречаются в различных средах разработки и фреймворках, таких как PyTorch.
Файлы .pth могут быть также использованы злоумышленниками для внедрения вредоносного кода в систему Python, так как они могут изменять список каталогов, в которых выполняется поиск модулей Python. Поэтому необходимо быть внимательными при работе с такими файлами и использовать только те файлы .pth, которые вы знаете и доверяете.


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

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Что делает флаг PYTHONOPTIMIZE?

Ответ:
Флаг -O или PYTHONOPTIMIZE в Python используется для оптимизации скомпилированного кода, что может привести к ускорению выполнения программы. Этот флаг удаляет отладочную информацию, отключает asset checks, asserts и отладочные проверки.

Стандартная оптимизация -O удаляет docstrings из скомпилированного byte-code, а также удаляет assert statements. С флагом -OO удаляются все docstrings в модулю (включая те, которые не соответствуют многострочным строкам) и также удаляются assert statements.

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

Например, для запуска скрипта с флагом -O, можно использовать следующую команду в командной строке:
python -O my_script.py


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

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

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


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

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Чем фреймворк отличается от библиотеки?

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

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

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

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


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

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое Cython? Что такое IronPython? Что такое PyPy? Почему они до сих пор существуют и зачем?

Cython – это язык программирования, нацеленный на увеличение производительности Python-кода. Cython позволяет использовать возможности языка Python и C/C++ для эффективного написания расширений модулей на языке Python. Он позволяет вам писать код на Python, который доступен из C/C++, и наоборот. Cython обеспечивает скорость выполнения, сравнимую со скоростью выполнения на языке C/C++, при этом сохраняя простоту и удобство использования языка Python. Cython compiler
компилирует исходный код в C/C++ и затем переводит его в машинный код, что дает быстрый доступ к низкоуровневым ресурсам операционной системы, таким как память и ввод-вывод. Cython также предоставляет возможность использовать дополнительные функции, такие как статическая типизация и параллельное программирование, для дополнительного увеличения производительности.

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

PyPy — это высокопроизводительная реализация языка программирования Python. Он был создан с целью предоставления более быстрой и эффективной альтернативы стандартному интерпретатору CPython. PyPy включает компилятор Just-In-Time (JIT), который может оптимизировать выполнение кода Python во время выполнения, что может привести к значительному повышению производительности по сравнению с CPython, особенно для определенных типов рабочих нагрузок. PyPy также поддерживает многие из тех же функций и модулей, что и CPython, включая объектно-ориентированное программирование, динамическую типизацию и стандартную библиотеку Python.


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

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


if __debug__:
assert False, ("error")


Ответ:
Этот код вызывает ошибку утверждения assert с сообщением "error", если __debug__ равен True.
__debug__ – это встроенная переменная Python, которая является истинной, если к интерактивной консоли или скрипту был присоединен флаг оптимизации -O. Для типичных скриптов в режиме отладки эта переменная равна True. Если оптимизация включена, то интерпретатор Python игнорирует все операторы утверждения assert, поэтому этот код не вызовет ошибку в optimized mode.
Такой код может быть использован для проверки инвариантов в программе или для отладки кода. Если утверждение не выполняется и вызывается AssertionError, это означает, что в программе произошло что-то непредвиденное, что нарушило заданное утверждение, и программа остановится с сообщением об ошибке.

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

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
🤩 Исчерпывающее руководство по Python [2023]

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

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

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


➡️ Ссылка на книгу

➡️ Подготовка Python | #книги
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Что такое monkey patching? Приведите пример использования

Monkey patching – это техника изменения поведения кода во время выполнения путем динамической замены или добавления методов или атрибутов в существующем объекте. По сути, мы просто переопределяем метод за пределами объявления класса. Это может быть полезно, когда изменения не могут быть внесены в существующий код, и требует минимальных изменений в существующем коде.

Например, можно добавить новый метод в класс в runtime, который наследуется от базового класса:


class MyBaseClass:
def my_method(self):
print('Hello from MyBaseClass')

def monkey_patch():
def new_method(self):
print('Hello from new_method')
MyBaseClass.my_method = new_method

monkey_patch()
obj = MyBaseClass()
obj.my_method() # выведет "Hello from new_method"


В этом примере мы добавляем новый метод new_method() в класс MyBaseClass, используя функцию monkey_patch(). После этого, вызов метода obj.my_method() выведет строку 'Hello from new_method'

Важно учитывать, что использование monkey patching может усложнить отладку и поддержку в будущем, поэтому следует использовать эту технику с осторожностью и только при необходимости.


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

➡️ Подготовка Python | #вопросы
Please open Telegram to view this post
VIEW IN 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