Программистика
关闭频道
Лучший канал про python Ссылка для друга: https://t.me/+Ai6ughKtf5g2ZmFi Купить рекламу: https://telega.in/c/+Ai6ughKtf5g2ZmFi Админ: @JeyRahol По рекламе: @ReivuManager
显示更多5 596
订阅者
-224 小时
+87 天
-8530 天
帖子存档
5 597
👀 Книга: Программируем с Minecraft
⏺Телепортация с помощью переменных
⏺Математик а, моментальное строительство и суперпрыжки
⏺Общаемся с помощью строк
⏺«Истина» и «ложь» булевых значений
⏺Конструкция if, душ и потайная дверь
И многое другое
@programistica // #doc
5 597
⚙️ getattr(), setattr(), и hasattr() в python
В Python,
getattr(), setattr(), и hasattr() — это встроенные функции, которые предоставляют динамический доступ к атрибутам объекта. Эти функции делают код более гибким и позволяют работать с атрибутами объектов, имена которых могут быть неизвестны на момент написания кода.
getattr()
Функция getattr() возвращает значение атрибута объекта. Если атрибут не существует, можно определить возвращаемое значение по умолчанию.
Синтаксис:
getattr(object, 'attribute', default=None)
⏺object — объект, атрибут которого требуется получить.
⏺'attribute' — строка, имя атрибута.
⏺default — значение, которое вернется, если атрибут не найден (необязательный параметр).
setattr()
Функция setattr() устанавливает значение атрибута объекта. Если атрибут не существует, он будет создан.
Синтаксис:
setattr(object, 'attribute', value)
⏺object — объект, атрибут которого требуется установить или создать.
⏺attribute' — строка, имя атрибута.
⏺value — значение, которое нужно установить для атрибута.
hasattr()
Функция hasattr() проверяет, существует ли атрибут у объекта.
Синтаксис:
hasattr(object, 'attribute')
⏺object — объект для проверки наличия атрибута.
⏺'attribute' — строка, имя атрибута для проверки.
Эти функции очень полезны при работе с атрибутами объектов, особенно когда вы работаете с динамическими или неизвестными заранее данными. Они обеспечивают дополнительную гибкость и мощь при проектировании архитектуры программ на Python.
@programistica // #article5 597
💻 Вопрос из собеседования: В чем разница между is и ==?
Если кратко:
is проверяет идентичность, а == проверяет равенство.
Рассмотрим пример. Создайте несколько списков и назначьте им имена. Обратите внимание, что ниже b указывает на тот же объект, что и a:
a = [1,2,3]
b = a
c = [1,2,3]
Проверьте равенство и обратите внимание, что все объекты равны:
print(a == b)
print(a == c)
#=> True
#=> True
Но являются ли все они идентичными? Нет:
print(a is b)
print(a is c)
#=> True
#=> False
Можем проверить это, распечатав их идентификаторы объектов:
print(id(a))
print(id(b))
print(id(c))
#=> 4369567560
#=> 4369567560
#=> 4369567624
Идентификатор c отличается от идентификатора a и b.
Надеюсь это поможет вам пройти собеседование на желаемую вами работу, удачи🔥🔥🔥@programistica // #jobs
5 597
Эффективный метод быстрого освоения ChatGPT.
Обучение нейронной сети и создание правильных промптов – это длительный процесс, который требует значительного времени.
Здесь вы узнаете, как использовать ChatGPT в профессиональных целях, создавать нейросутрудников на заказ и зарабатывать на ИИ.
Вы создадите своего нейросотрудника с нуля, без опыта программирования.
Бесплатный доступ предоставляется сразу после регистрации.
Реклама. ООО "ТЕРРА ЭЙАЙ". ИНН 9728019395. erid: LjN8K4fWo
5 597
👀 Книга: Python для программирования криптовалют
⏺Конечные поля
⏺Эллиптические кривые
⏺Криптография по эллиптическим кривым
⏺Сериализация
⏺Транзакции
⏺Язык Script
И многое другое
@programistica // #doc
5 597
🖼️ Библиотека Python: Loguru
Loguru — это библиотека для логирования в Python, которая предлагает упрощенный способ захвата и управления логами. Она обеспечивает автоматическое определение контекста вызова, поддерживает цветной вывод и позволяет легко настраивать форматирование, фильтрацию и перенаправление логов без необходимости настройки обработчиков.
⚙️ Пример использования
from loguru import logger
# Конфигурация логирования: установка уровня логирования и формата вывода сообщений
logger.add("debug.log", format="{time} {level} {message}", level="DEBUG")
# Примеры логирования на разных уровнях
logger.debug("Это сообщение отладки")
logger.info("Это информационное сообщение")
logger.warning("Это предупреждение")
logger.error("Это сообщение об ошибке")
logger.critical("Это критическое сообщение")
try:
1 / 0
except ZeroDivisionError:
# Автоматический захват и логирование исключений
logger.exception("Произошла ошибка:")
# Логирование с использованием контекста
with logger.contextualize(user_id=123456):
logger.info("Это сообщение содержит дополнительный контекст")
# Логирование в файл
logger.add("file.log", rotation="100 KB")
logger.info("Это сообщение будет сохранено в файле")
В этом примере демонстрируются основные функции Loguru:
⏺Конфигурация логгера для записи сообщений в файл debug.log с определенным форматом.
⏺Логирование сообщений разного уровня важности.
⏺Автоматический захват исключений и логирование их с помощью logger.exception.
⏺Использование контекста для добавления дополнительной информации к логам.
⏺Ведение логов в файл с автоматической ротацией по достижению размера файла в 100 KB.
Loguru делает процесс логирования в Python более удобным и гибким, предоставляя простой интерфейс и мощные возможности для управления логами.
✔️ Установка
pip install loguru
⛓ Ссылка на документацию
@programistica // #Library5 597
2.
Наследование
Наследование позволяет новому классу перенимать атрибуты и методы уже существующего класса. Это облегчает повторное использование кода.
# Определение базового класса Vehicle
class Vehicle:
# Конструктор класса Vehicle, принимающий имя и скорость транспортного средства
def __init__(self, name, speed):
self.name = name # Инициализация атрибута name
self.speed = speed # Инициализация атрибута speed
# Метод для получения скорости транспортного средства
def get_speed(self):
return self.speed # Возвращает скорость транспортного средства
# Определение класса Car, который наследует класс Vehicle
class Car(Vehicle):
# Конструктор класса Car, принимающий имя, скорость и пробег автомобиля
def __init__(self, name, speed, mileage):
super().__init__(name, speed) # Вызов конструктора базового класса Vehicle для инициализации name и speed
self.mileage = mileage # Инициализация атрибута mileage, уникального для класса Car
# Метод для получения пробега автомобиля
def get_mileage(self):
return self.mileage # Возвращает пробег автомобиля
# Создание экземпляра класса Car с именем "Toyota", скоростью 150 и пробегом 20000
car = Car("Toyota", 150, 20000)
# Вывод скорости и пробега автомобиля, используя методы get_speed и get_mileage
print(car.get_speed(), car.get_mileage())
Этот код иллюстрирует принцип наследования в ООП, где класс Car расширяет функциональность базового класса Vehicle, добавляя к нему новый атрибут mileage и метод get_mileage() для его получения. Класс Car наследует атрибуты и методы класса Vehicle, что позволяет использовать их в экземплярах класса Car. Таким образом, Car является специализированным типом Vehicle, обладающим всеми его свойствами, а также дополнительным свойством — пробегом.
3. Полиморфизм
Полиморфизм — это способность одного и того же кода работать с объектами разных типов.
# Определение класса Dog
class Dog:
# Метод speak, специфичный для класса Dog
def speak(self):
return "Woof!" # Возвращает звук, который издает собака
# Определение класса Cat
class Cat:
# Метод speak, специфичный для класса Cat
def speak(self):
return "Meow!" # Возвращает звук, который издает кошка
# Функция, демонстрирующая полиморфизм
def get_pet_sound(pet):
# Выводит звук, который издает животное
# Аргумент pet может быть объектом любого класса, имеющего метод speak
print(pet.speak())
# Создание экземпляра класса Dog и вызов функции get_pet_sound
get_pet_sound(Dog()) # Выводит "Woof!"
# Создание экземпляра класса Cat и вызов функции get_pet_sound
get_pet_sound(Cat()) # Выводит "Meow!"
В этом примере функция get_pet_sound() принимает объект pet в качестве аргумента и вызывает его метод speak(). Благодаря полиморфизму, функция может работать с объектами различных классов, если у этих классов есть метод speak(). Это позволяет писать более универсальный и гибкий код, который может работать с объектами разных типов, не зная их конкретной реализации.5 597
4.
Абстракция
Абстракция означает выделение ключевых, наиболее значимых характеристик объекта, исключая из рассмотрения незначимые. Абстракция часто реализуется с помощью абстрактных классов и интерфейсов.
# Импорт необходимых модулей для создания абстрактного класса и абстрактных методов
from abc import ABC, abstractmethod
# Определение абстрактного класса Shape
class Shape(ABC):
# Декоратор @abstractmethod указывает, что метод area должен быть переопределен в подклассах
@abstractmethod
def area(self):
pass # Тело абстрактного метода оставлено пустым
# Определение класса Rectangle, который наследует абстрактный класс Shape
class Rectangle(Shape):
# Конструктор класса Rectangle принимает два параметра: ширину и высоту прямоугольника
def __init__(self, width, height):
self.width = width # Инициализация атрибута width
self.height = height # Инициализация атрибута height
# Переопределение абстрактного метода area для вычисления площади прямоугольника
def area(self):
return self.width * self.height # Возвращается произведение ширины на высоту
# Создание экземпляра класса Rectangle с шириной 10 и высотой 20
rect = Rectangle(10, 20)
# Вывод площади прямоугольника, используя переопределенный метод area
print(rect.area()) # Выведет 200
При попытке создать экземпляр абстрактного класса Shape напрямую, Python выдаст ошибку, так как абстрактные классы предназначены для наследования, а не для прямого использования. Класс Rectangle является конкретной реализацией абстрактного класса Shape и обязан предоставить реализацию абстрактного метода area(). Этот механизм обеспечивает выполнение требования о реализации определенного набора методов во всех классах, наследующих абстрактный класс, что упрощает проектирование и повышает предсказуемость кода.
@programistica // #article5 597
⚙️ Принципы ООП
Объектно-ориентированное программирование (ООП) — это парадигма программирования, основанная на концепции "объектов", которые могут содержать данные в виде полей (часто называемых атрибутами или свойствами) и код в виде процедур (часто называемых методами). ООП моделирует программные приложения, используя объекты и классы, что облегчает разработку и поддержку кода. Основные принципы ООП включают инкапсуляцию, наследование, полиморфизм и абстракцию.
1. Инкапсуляция
Инкапсуляция — это механизм упаковки данных (атрибутов) и методов, работающих с этими данными, в единый компонент (класс) и ограничение доступа к некоторым компонентам объекта из внешнего мира.
# Определение класса Account
class Account:
# Метод инициализации класса
def __init__(self, owner, balance=0):
self.owner = owner # Сохранение владельца счета как публичного атрибута
self.__balance = balance # Инициализация баланса как приватного атрибута
# Метод для добавления средств на счет
def deposit(self, amount):
self.__balance += amount # Увеличение баланса на указанную сумму
print(f"Added {amount} to the balance") # Вывод сообщения о депозите
# Метод для снятия средств со счета
def withdraw(self, amount):
if amount > self.__balance: # Проверка достаточности средств на счете
print("Not enough funds") # Вывод сообщения об ошибке при недостаточности средств
return
self.__balance -= amount # Уменьшение баланса на указанную сумму
print(f"Withdrew {amount} from the balance") # Вывод сообщения о снятии
# Метод для получения текущего баланса
def get_balance(self):
return self.__balance # Возвращает текущий баланс
# Создание экземпляра класса Account с именем владельца "John" и начальным балансом по умолчанию (0)
acc = Account("John")
# Вызов метода deposit для добавления 100 единиц на счет
acc.deposit(100)
# Вывод текущего баланса с использованием метода get_balance
print(acc.get_balance())
# Вызов метода withdraw для снятия 50 единиц со счета
acc.withdraw(50)
# Вывод текущего баланса после снятия
print(acc.get_balance())
Этот код демонстрирует базовый пример инкапсуляции в ООП на Python. Приватный атрибут __balance используется для хранения баланса счета, доступ к которому осуществляется только через публичные методы класса (deposit, withdraw, get_balance). Это предотвращает прямой доступ к балансу извне класса и позволяет контролировать изменения баланса, обеспечивая целостность данных.5 597
💻 Вопрос из собеседования: Что такое pickling и unpickling?
Модуль pickle принимает любой объект Python, преобразует его в строковое представление и сохраняет в файл с помощью функции dump, такой процесс называется pickling. Процесс извлечения исходных объектов Python из сохраненного строкового представления называется unpickling.
import pickle
a = 1
#Процесс pickling
pickle.dump(a, open('file.sav', 'wb'))
#Процесс unpickling
file = pickle.load(open('file.sav', 'rb'))
Надеюсь это поможет вам пройти собеседование на желаемую вами работу, удачи🔥🔥🔥@programistica // #jobs
5 597
🖼️ Библиотека Python: Starlette
Starlette — это легковесный ASGI (Asynchronous Server Gateway Interface) фреймворк/тулкит для Python, предназначенный для создания асинхронных веб-приложений и API. Он предлагает высокую производительность и гибкость, поддерживая асинхронные запросы и предоставляя мощные инструменты для маршрутизации, запросов, форм и аутентификации, делая его идеальным выбором для современных веб-разработок.
⚙️ Пример использования
from starlette.applications import Starlette
from starlette.responses import PlainTextResponse
from starlette.routing import Route
import uvicorn
async def welcome(request):
return PlainTextResponse('Добро пожаловать в мир Starlette!')
app = Starlette(debug=True, routes=[
Route('/', welcome),
])
if __name__ == '__main__':
uvicorn.run(app, host='127.0.0.1', port=8000)
В этом примере мы создаем базовое веб-приложение с использованием Starlette, которое содержит один маршрут /, обрабатываемый асинхронной функцией welcome. Функция welcome возвращает простой текстовый ответ с приветствием. После запуска приложения с помощью Uvicorn, вы можете перейти по адресу http://127.0.0.1:8000/ в вашем веб-браузере, чтобы увидеть ответ от сервера.
✔️ Установка
pip install starlette uvicorn
⛓ Ссылка на документацию
@programistica // #Library5 597
👀 Книга: Основы программирования в PYTHON, Том 2
⏺ЧТЕНИЕ, ЗАПИСЬ И ДРУГИЕ ДЕЙСТВИЯ В ФАЙЛЕ
⏺ВЗАИМОДЕЙСТВИЕ С PDF ФАЙЛАМИ В PYTHON
⏺ОБРАБОТКА СТРОК В PYTHON
⏺АЛГОРИТМЫ СОРТИРОВКИ
⏺PANDAS – ИНСТРУМЕНТ АНАЛИЗА ДАННЫХ
И многое другое
@programistica // #doc
5 597
⚙️Алгоритм поиск в глубину
Поиск в глубину (Depth-First Search, DFS) — это один из основных алгоритмов обхода или поиска в графах и деревьях. Он используется для исследования всех узлов графа или дерева, начиная с корневого узла и продвигаясь как можно дальше вдоль каждой ветви перед откатом.
Принцип работы DFS
DFS работает по следующему принципу:
⏺Начинает с корневого узла (или начального узла) и помечает его как посещенный.
⏺Переходит к одному из соседних узлов, который еще не был посещен.
⏺Повторяет шаг 2 до тех пор, пока не достигнет узла, у которого все соседние узлы уже посещены.
⏺Возвращается назад (откатывается) к предыдущему узлу и повторяет процесс для других соседних узлов.
⏺Процесс продолжается до тех пор, пока не будут посещены все узлы.
Применение DFS
DFS находит широкое применение в различных задачах:
⏺Поиск путей: Используется для нахождения всех возможных путей между двумя узлами в графе.
⏺Обнаружение циклов: Позволяет выявлять циклы в графах.
⏺Поиск компонентов связности: Помогает определить все компоненты связности в графе.
⏺Топологическая сортировка: Используется для упорядочивания узлов в направленном ациклическом графе.
⏺Решение головоломок: Применяется в задачах, таких как лабиринты и головоломки, где нужно исследовать все возможные пути.
Пример реализации DFS на Python
Рассмотрим пример реализации DFS для поиска в графе, представленном в виде списка смежности:/
def dfs(graph, start, visited=None):
if visited is None:
visited = set()
visited.add(start)
print(start) # Действие с узлом (например, вывод)
for neighbor in graph[start]:
if neighbor not in visited:
dfs(graph, neighbor, visited)
return visited
# Пример графа в виде списка смежности
graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F'],
'D': ['B'],
'E': ['B', 'F'],
'F': ['C', 'E']
}
# Запуск DFS с начального узла 'A'
dfs(graph, 'A')
Плюсы и минусы DFS
Плюсы:
⏺Простота реализации: DFS легко реализовать с использованием рекурсии или стека.
⏺Эффективность: Время выполнения DFS составляет O(V + E), где V — количество узлов, а E — количество рёбер.
⏺Малое потребление памяти: Для хранения узлов в стеке требуется O(h) памяти, где h — глубина дерева (или графа).
Минусы:
⏺Не гарантирует кратчайший путь: DFS не всегда находит кратчайший путь в графе.
⏺Риск переполнения стека: При глубокой рекурсии может возникнуть переполнение стека, особенно в очень больших графах.
⏺Неэффективность на широких графах: В графах с большой шириной (много соседних узлов) DFS может быть менее эффективен по сравнению с BFS (поиском в ширину).
DFS является мощным и гибким инструментом для решения множества задач в графах и деревьях, но важно учитывать его особенности и ограничения при выборе алгоритма для конкретной задачи.
@programistica // #article5 597
💻 Вопрос из собеседования: Назовите пример режимов обработки файлов с помощью Python?
Существуют следующие режимы:
Режим только для чтения (‘r’): открыть файл для чтения. Это режим по умолчанию.
Режим только для записи (‘w’): открыть файл для записи. Если файл содержит данные, они будут потеряны. Создается новый файл.
Режим чтения-записи (‘rw’): открыть файл для чтения, режим записи. Это режим обновления.
Режим добавления (‘a’): открыть для записи, добавить в конец файла, если файл существует.
Надеюсь это поможет вам пройти собеседование на желаемую вами работу, удачи🔥🔥🔥@programistica // #jobs
5 597
🖼️ Библиотека Python: PyFlame
PyCaret — это библиотека машинного обучения с открытым исходным кодом для Python, которая автоматизирует поток работы машинного обучения, позволяя выполнять сложные задачи моделирования всего несколькими строками кода. Она предоставляет простой и эффективный способ для подготовки данных, выбора моделей, настройки гиперпараметров, а также для анализа и визуализации результатов, делая машинное обучение доступным не только для опытных специалистов, но и для новичков в этой области.
⚙️ Пример использования
from pycaret.datasets import get_data
from pycaret.classification import *
# Загружаем датасет
data = get_data('diabetes')
# Инициализируем настройки окружения в PyCaret и загружаем датасет
s = setup(data, target = 'Class variable')
# Сравним различные модели для нахождения лучшей
best_model = compare_models()
# Создаем модель на основе лучшей найденной
model = create_model(best_model)
# Настраиваем модель
tuned_model = tune_model(model)
# Оцениваем модель
evaluate_model(tuned_model)
# Делаем предсказания на новых данных
predictions = predict_model(tuned_model, data=data)
# Выводим предсказания
print(predictions.head())
Этот код демонстрирует базовый поток работы с PyCaret для задачи классификации. Мы начинаем с загрузки данных и инициализации настроек окружения в PyCaret с указанием целевой переменной. Затем мы используем compare_models() для автоматического сравнения различных моделей машинного обучения и выбора лучшей. После этого мы создаем и настраиваем выбранную модель, оцениваем ее и делаем предсказания на новых данных.
✔️ Установка
pip install pycaret
⛓ Ссылка на документацию
@programistica // #Library5 597
👀 Книга: Расширенная аналитика с PySpark
⏺Анализ больших данных
⏺Введение в анализ данных с PySpark
⏺Рекомендация музыки и набор данных AudioScrobbler
⏺Прогнозирование с помощью деревьев и лесов решений
⏺Обнаружение аномалий при помощи кластеризации
И многое другое
@programistica // #doc
5 597
💻 Вопрос из собеседования: Когда выполняется except, в блоке try-except?
В Python исключения обрабатываются с помощью блоков
try/except. Для этого операция, которая может вызвать исключение, помещается внутрь блока try. А код, который должен быть выполнен при возникновении ошибки, находится внутри except.
Например, вот как можно обработать ошибку деления на ноль:
try:
a = 7 / 0
except:
print('Ошибка! Деление на 0')
Здесь в блоке try находится код a = 7 / 0 — при попытке его выполнить возникнет исключение и выполнится код в блоке except (то есть будет выведено сообщение "Ошибка! Деление на 0"). После этого программа продолжит свое выполнение.
Надеюсь это поможет вам пройти собеседование на желаемую вами работу, удачи🔥🔥🔥@programistica // #jobs
5 597
🖼️ Библиотека Python: Boltons
Boltons — это мощный набор инструментов и утилит для Python, предназначенный для дополнения стандартной библиотеки без внешних зависимостей. Он предлагает широкий спектр готовых к использованию решений, включая усовершенствованные структуры данных, утилиты для работы со строками, числами, датами и файлами, улучшая тем самым производительность и эффективность разработки.
⚙️ Пример использования
from boltons.cacheutils import cachedproperty
class Circle:
def __init__(self, radius):
self.radius = radius
@cachedproperty
def area(self):
print("Вычисление площади круга")
return 3.141592653589793 * self.radius * self.radius
# Создаем экземпляр круга с радиусом 5
circle = Circle(5)
# При первом обращении к свойству area, будет выполнено его вычисление
print(circle.area) # Вычисление площади круга и вывод результата
# При последующих обращениях к свойству area, вычисление выполняться не будет, значение будет взято из кэша
print(circle.area) # Вывод результата без повторного вычисления
В этом примере, когда мы в первый раз обращаемся к свойству area объекта circle, выполняется вычисление площади круга, и результат кэшируется. При последующих обращениях к этому свойству, вычисление повторно не производится, а используется ранее кэшированное значение, что демонстрирует эффективность использования CachedProperty для оптимизации производительности ваших Python приложений.
✔️ Установка
pip install boltons
⛓ Ссылка на документацию
@programistica // #Library
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
