💀
Второй курс РПО
Разработка программных модулей
Разработка программных модулей
  • Модели разработки
  • Ошибки и отладка программ
  • Средства разработки алгоритмов
    • Основные принципы и стадии тестирования
  • Сложностные классы
  • Эмуляторы операционных систем
  • Сложность сортировки
  • Уровни тестирования
  • Задание №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
  1. Структуры в Python по аналогии с C++

Диалоги гениев

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


Muriam (новичок): Ребята, привет! Есть ли в Python понятие структуры, как в C++? Типа такого:

struct edgeStruct {
    int u, v, weight; // ребро (u, v), weight - вес ребра
};

Мне нужно портировать программу с алгоритмом Краскала на Python.


IT_Exp (ветеран форума): Привет. Нет, структур в Python нет. Есть классы.


Garry Galler (гуру Python): Кто-нибудь ещё скажет, что нет структур, и я начну думать, что вы в Питоне кодите через Excel. Конечно, они есть. Вот вам namedtuple:

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

Легко, изящно и не вызывает странных флэшбэков с #include.


tooru (энтузиаст с лишней энергией): Ну, или через __slots__, чтобы память экономить:

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

edge = EdgeStruct(1, 2, 3)
print(edge.u, edge.v, edge.weight)

Но если экономия памяти вам не нужна, то зачем вы вообще тут?


Viktorrus: Зачем такие сложности? Вот вам просто класс:

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

На Python не надо усложнять. Мы тут все за минимализм. У нас даже памяти на типизацию нет!


dondublon (глубокий философ): Ах, вы хотите, чтобы Python был как C++? Это звучит, как просьба сделать ваши шоколадные конфеты похожими на суп из сельди.

Но я вас понял. Вот вам модуль ctypes:

from ctypes import Structure, c_int

class EdgeStruct(Structure):
    _fields_ = [("u", c_int), ("v", c_int), ("weight", c_int)]

edge = EdgeStruct(1, 2, 3)
print(edge.u, edge.v, edge.weight)

Только знайте: если вы пойдёте по этому пути, назад дороги нет.


Muriam: Ребят, я в замешательстве. Столько вариантов, а что выбрать?


Admin_Troll (модератор-юморист): Выбрать? Это Python. Тут никто ничего не выбирает, тут просто делают так, чтобы работало. Если хотите, чтобы было "как в C++", ставьте компилятор C++ и сделайте вид, что это Python.


Muriam: Но ведь Python должен быть проще!


Admin_Troll: Просто? В Python просто только одно: когда вы через месяц начнёте переделывать свой код, вы будете винить всех, кроме себя.


Garry Galler: Ладно, хватит юмора. Вот вам правильный ответ:

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

edge = EdgeStruct(1, 2, 3)
print(edge.u, edge.v, edge.weight)

Классическое, универсальное решение. Как и ваше терпение, хватит для любых задач.


Muriam: Спасибо. Вроде разобрался.


Admin_Troll (заключительное слово): Ну что ж, добро пожаловать в Python, где нет структур, нет строгости, но зато есть радость от того, что у вас наконец-то работает код. И если нет – вы всегда можете винить белый пробел.

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

Last updated 4 months ago