API должен быть stateless (не сохранять состояние клиента между запросами) и поддерживать кэширование для повышения производительности. Также важно использовать коды состояния HTTP для информирования клиента о результате запроса.
# Пример URI для ресурса
/users # GET — получить список пользователей
/users/1 # GET — получить данные пользователя с ID 1
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1
class Component:
def operation(self):
return "Component"
class Decorator(Component):
def __init__(self, component):
self._component = component
def operation(self):
return f"Decorator({self._component.operation()})"
Декоратор оборачивает объект и добавляет новое поведение до или после вызова его методов.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
getattr()
позволяет получать значение атрибута объекта по его имени, переданному в виде строки. Это полезно, когда имя атрибута неизвестно заранее или динамически изменяется.Синтаксис:
getattr(object, name[, default])
-
object
— объект, атрибут которого нужно получить. -
name
— строка, имя атрибута. -
default
— опциональное значение, которое возвращается, если атрибут не найден. Если не указано, выбрасывается AttributeError
.Пример:
class Example:
value = 42
obj = Example()
attribute_name = 'value'
result = getattr(obj, attribute_name) # Получаем значение атрибута 'value'
print(result) # 42
Если атрибут отсутствует, можно вернуть значение по умолчанию:
result = getattr(obj, 'unknown', 'default_value') # 'default_value'
Использование
getattr()
упрощает работу с динамическими атрибутами и делает код более гибким.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1
Пример декоратора для логирования:
import logging
logging.basicConfig(level=logging.INFO)
def log_function_call(func):
def wrapper(*args, **kwargs):
logging.info(f"Calling {func.__name__} with args: {args}, kwargs: {kwargs}")
result = func(*args, **kwargs)
logging.info(f"{func.__name__} returned: {result}")
return result
return wrapper
@log_function_call
def add(a, b):
return a + b
add(2, 3)
- Декоратор
log_function_call
логирует начало вызова функции, переданные аргументы и результат выполнения. - Использование
@log_function_call
перед функцией автоматически добавляет логирование. Такой подход упрощает добавление логирования в любую функцию, делая код чище и поддерживаемым.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
pop()
используется для удаления и возврата элемента из списка по указанному индексу. Если индекс не указан, удаляется последний элемент.Синтаксис:
list.pop([index])
-
index
— опциональный параметр, указывающий позицию элемента. Если не указан, по умолчанию используется -1
(последний элемент). Пример:
numbers = [1, 2, 3, 4]
removed_element = numbers.pop(1) # Удаляет элемент с индексом 1
print(numbers) # [1, 3, 4]
print(removed_element) # 2
Если список пуст или индекс выходит за пределы, возникает
IndexError
. Использование
pop()
удобно для работы со стеками и удаления элементов с сохранением их значений.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
try/except
вместе с ключевым словом await
. Это позволяет перехватывать ошибки, возникающие при выполнении асинхронных операций.
async def fetch_data():
try:
response = await some_async_function()
return response
except SomeSpecificError as e:
print(f"An error occurred: {e}")
except Exception as e:
print(f"Unexpected error: {e}")
Если асинхронная функция вызывает исключение, оно будет перехвачено в блоке
except
. Это особенно полезно при работе с сетевыми запросами или другими операциями, где возможны сбои.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
abs()
возвращает абсолютное значение числа, то есть его модуль. Она работает с целыми числами, числами с плавающей точкой и комплексными числами.
result = abs(-10) # Вернет 10
Для комплексных чисел
abs()
возвращает величину (модуль) числа:
result = abs(3 + 4j) # Вернет 5.0
Функция полезна, когда нужно игнорировать знак числа или вычислить расстояние до нуля на числовой оси.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
ся
оператор in. Он воз
вращает True, если элемент най
ден, и False, если нет.
fruits = ['apple', 'banana', 'orange']
print('banana' in fruits) # True
print('grape' in fruits) # False
Для проверки отсутствия элемента можно использ
овать
not in:
print('grape' not in fruits) # True
Этот способ работает для любых итерируемых объектов и является наиболее читаемым и эффективным для большинства случаев.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
()
, внутри которых перечисляются элементы через запятую. Если кортеж содержит один элемент, после него ставится запятая, чтобы отличить от обычного выражения в скобках.
empty_tuple = () # Пустой кортеж
single_element_tuple = (42,) # Кортеж с одним элементом
multiple_elements_tuple = (1, 2, 3) # Кортеж с несколькими элементами
Кортеж также можно создать без скобок, просто перечислив элементы через запятую:
another_tuple = 4, 5, 6
Кортежи неизменяемы, поэтому после создания их элементы нельзя изменить.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
async
и await
используются для работы с асинхронным кодом. Они позволяют писать неблокирующие операции, что особенно полезно для задач, связанных с вводом-выводом (например, сетевые запросы).async
Определяет асинхронную функцию. Такая функция возвращает корутину, которая может быть приостановлена и возобновлена.
async def fetch_data():
return "data"
await
Используется внутри асинхронной функции для ожидания результата другой асинхронной операции. Код после
await
выполняется только после завершения ожидаемой задачи.
async def main():
result = await fetch_data()
print(result)
Асинхронные функции вызываются через
asyncio.run
или внутри других асинхронных функций. Они позволяют эффективно управлять множеством задач без блокировки основного потока.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3
isinstance()
позволяет проверить, принадлежит ли объект к определенному классу или типу. Это полезно для проверки типов данных и обработки различных случаев в коде.Синтаксис:
isinstance(object, classinfo)
-
object
— объект, тип которого проверяется. -
classinfo
— класс, тип или кортеж классов/типов для проверки. Пример:
value = 42
if isinstance(value, int):
print("Это целое число")
elif isinstance(value, (float, str)):
print("Это либо float, либо строка")
Функция возвращает
True
, если объект является экземпляром указанного класса или одного из классов в кортеже. Это удобно для проверки типов без явного сравнения через type()
.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Синтаксис:
class ParentClass:
def __init__(self, value):
self.value = value
class ChildClass(ParentClass):
def display(self):
print(f"Value: {self.value}")
-
ParentClass
— родительский класс. -
ChildClass
— дочерний класс, который наследует атрибуты и методы ParentClass
. Дочерний класс может переопределять методы родительского или добавлять новые. Например, метод
__init__
можно расширить:
class ChildClass(ParentClass):
def __init__(self, value, extra):
super().__init__(value)
self.extra = extra
Здесь
super()
используется для вызова метода родительского класса.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Кортежи и списки — это встроенные структуры данных в Python, но они имеют ключевые различия.
1️⃣ Кортежи (tuple) неизменяемы, то есть после создания их элементы нельзя изменить, добавить или удалить. Это делает кортежи более безопасными для данных, которые не должны изменяться. Кортежи создаются с помощью круглых скобок:
2️⃣ Списки (list) изменяемы, что позволяет добавлять, удалять или изменять элементы. Списки создаются с помощью квадратных скобок:
✏️ Из-за неизменяемости кортежи могут быть более производительными и использоваться в качестве ключей в словарях, в отличие от списков. Выбор между кортежами и списками зависит от необходимости изменения данных.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
my_tuple = (1, 2, 3)
.my_list = [1, 2, 3]
.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
NameError
. Это происходит, потому что интерпретатор не может найти ссылку на переменную в памяти.
print(x) # NameError: name 'x' is not defined
В данном примере переменная
x
не была создана, поэтому попытка её использования приводит к ошибке. Важно всегда инициализировать переменные перед их использованием, чтобы избежать подобных ошибок.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
lambda
. Они используются для создания простых функций "на лету", когда нет необходимости объявлять их через def
.
multiply = lambda x, y: x * y
print(multiply(3, 4)) # 12
Анонимные функции часто применяются в сочетании с функциями высшего порядка, такими как
map
, filter
или sorted
, для выполнения операций над коллекциями. Они ограничены одной строкой выражения и не поддерживают сложные конструкции, такие как циклы или условия.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3