💀
Второй курс РПО
Разработка программных модулей
Разработка программных модулей
  • Модели разработки
  • Ошибки и отладка программ
  • Средства разработки алгоритмов
    • Основные принципы и стадии тестирования
  • Сложностные классы
  • Эмуляторы операционных систем
  • Сложность сортировки
  • Уровни тестирования
  • Задание №1
  • Регрессионное тестирование
  • Тестирование «белым ящиком»
  • Как делать оценку сложности?
  • Алгоритмы и сложность
  • Тестирование "белым ящиком" №2
  • Сложность алгоритмов
  • Тестирование "белым ящиком" №3
  • Тестирование "Чёрным ящиком»" №1
  • Тестирование "Черным ящиком" №2
  • Оценка сложности эвристических алгоритмов
  • Принципы ООП
  • Тестирование "Черным ящиком" №3
  • КТ - В3
  • Модульное тестирование
    • С кодами
  • Модульное тестирование
  • Абстрактные классы и интерфейсы в Python
  • Структуры в Python по аналогии с C++
    • Диалоги гениев
  • Делегаты в Python
    • Ещё более не смешные диалоги
  • Регулярные выражения в Python от простого к сложному
  • Python: Коллекции
  • Параметризованные классы (шаблоны)
  • Указатели и операции со списками в Python
  • Интеграционное тестирование
  • Работа с классами. Перегрузка методов
  • Определение операций в классе.
  • Создание наследованных классов
  • Интеграционное тестирование
  • Работа с объектами через интерфейсы
  • Использование стандартных интерфейсов
  • Работа с типом данных "Структура"
  • Коллекции. Параметризованные классы
  • Использование регулярных выражений
  • Операции со списками
  • Что такое паттерны проектирования?
  • Шпаргалка по шаблонам проектирования
    • [Habr] Шпаргалка
  • UML-диаграммы проектирования
  • Использование основных шаблонов.
  • Использование каких то там шаблонов
  • 15-я Практическая
  • 16-я Практическая
  • Graphviz Online
  • 17-я Практическая
  • Введение в теорию программирования: Объектно-ориентированный подход
  • Документирование софта и стандарты
  • C# Ввод и вывод
  • Оптимизация кода: просто о главном
  • Автоматизация разработки технической документации
  • Автоматизированное документирование и первичные данные
  • ADO.NET что это?
Powered by GitBook
On this page

Структуры в Python по аналогии с C++

15.01.2025

1. Вопрос: Есть ли структуры в Python, похожие на структуры в C++? Ответы экспертов:

  • В Python нет встроенного аналога структур C++.

  • Вместо структур используются классы, словари, списки и кортежи.

  • Если нужна "структура", похожая на C++, можно использовать:

    а) namedtuple из модуля collections:

    from collections import namedtuple
    edgeStruct = namedtuple('edgeStruct', 'u v weight')
    rebro = edgeStruct(u=1, v=2, weight=3)
    print(rebro.u)  # 1

    б) ctypes для взаимодействия с нативным кодом.

  • Пример с ctypes: Создание структуры для работы с бинарными данными (модуль struct):

    import struct
    data = struct.pack('>i4sh', 7, b'spam', 8)
  • Если нужно больше гибкости или специфические свойства: в) Классы:

    class EdgeStruct:
        def __init__(self, u, v, weight):
            self.u = u
            self.v = v
            self.weight = weight

2. Дополнения и комментарии:

  • Использование __slots__ в классах может снизить потребление памяти, но это не дает прямого аналога структур C++.

    class A:
        __slots__ = ('u', 'v', 'weight')
  • Модуль struct позволяет упаковывать/распаковывать двоичные данные для работы с файлами или системами, использующими фиксированный формат данных.


3. Алгоритм Краскала:

Программа на C++ реализует алгоритм Краскала для поиска минимального остовного дерева графа. Перевод программы на Python может выглядеть так:

from collections import namedtuple

Edge = namedtuple('Edge', 'u v weight')

def sort_by_weight(edges):
    return sorted(edges, key=lambda edge: edge.weight)

def kruskal(edges, n):
    parents = list(range(n))
    tree_weight = 0

    def find_parent(node):
        if parents[node] != node:
            parents[node] = find_parent(parents[node])
        return parents[node]

    for edge in sort_by_weight(edges):
        parent_u = find_parent(edge.u)
        parent_v = find_parent(edge.v)
        if parent_u != parent_v:
            print(f"( {edge.u}, {edge.v} ) : {edge.weight}")
            tree_weight += edge.weight
            parents[parent_u] = parent_v

    print(f"Total Weight: {tree_weight}")

# Пример данных
edges = [
    Edge(0, 1, 4),
    Edge(0, 2, 4),
    Edge(1, 2, 2),
    Edge(2, 3, 3),
    Edge(3, 4, 2)
]
kruskal(edges, 5)

Вывод:

  • Python предлагает несколько способов моделировать структуры, включая namedtuple, классы и модули (struct, ctypes).

  • Алгоритм Краскала можно адаптировать на Python с использованием более высокоуровневых структур данных.

  • Рекомендуется изучить области видимости и основы работы с классами для лучшего понимания Python.

PreviousАбстрактные классы и интерфейсы в PythonNextДиалоги гениев

Last updated 4 months ago