История изменений
Исправление olegsov, (текущая версия) :
это уже ушло от темы но вообще-то для этого есть 2 варианта
from collections import namedtuple
и еще вариант, который я использую постоянно - просто создается некий класс, его экземпляр и уже в него записываются поля-аттрибуты с нужными именами.
например
class rec:
pass
a = rec()
a.pole1 = 100
a.pole2 = 200
у меня сейчас класс не пустой - есть несколько методов для упрощения создания, присваивания и т.д. в частности, вышенаписанное можно написать как a = rec(pole1=100, pole2=200).
Этот метод хорош для динамической типизации (ибо не надо заранее определять что будет содержать «структура», а также объекты являются mutable в отличие от тупля) но плох тем, что каждый такой объект занимает больше места, чем тупль (т.к. словарь за собой тащит), поэтому если надо хранить большой массив элементов то лучше использовать вариант namedtuple - там на каждый экземпляр памяти надо столько же сколько и на простой тупль.
Но вообще везде где мне бы пришлось запоминать номера позиций в тупле вместо имени поля, использую этот метод. Например, если вдруг функция возвращает более одного параметра - проще использовать «rec».
Исправление olegsov, :
это уже ушло от темы но вообще-то для этого есть 2 варианта
from collections import namedtuple
и еще вариант, который я использую постоянно - просто создается некий класс, его экземпляр и уже в него записываются поля-аттрибуты с нужными именами.
например
class rec:
pass
a = rec()
a.pole1 = 100
a.pole2 = 200
у меня сейчас класс не пустой - есть несколько методов для упрощения создания, присваивания и т.д. в частности, вышенаписанное можно написать как a = rec(pole1=100, pole2=200).
Этот метод хорош для динамической типизации (ибо не надо заранее определять что будет содержать «структура», а также объекты являются mutable в отличает от тупля) но плох тем, что каждый такой объект занимает больше места, чем тупль (т.к. словарь за собой тащит), поэтому если надо хранить большой массив элементов то лучше использовать вариант namedtuple - там на каждый экземпляр памяти надо столько же сколько и на простой тупль.
Но вообще везде где мне бы пришлось запоминать номера позиций в тупле вместо имени поля, использую этот метод. Например, если вдруг функция возвращает более одного параметра - проще использовать «rec».
Исходная версия olegsov, :
это уже ушло от темы но вообще-то для этого есть 2 варианта
from collections import namedtuple
и еще вариант, который я использую постоянно - просто создается некий класс, его экземпляр и уже в него записываются поля-аттрибуты с нужными именами.
например
class rec:
pass
a = rec()
a.pole1 = 100
a.pole2 = 200
у меня сейчас класс не пустой - есть несколько методов для упрощения создания, присваивания и т.д. в частности, вышенаписанное можно написать как a = rec(pole1=100, pole2=200).
Этот метод хорош для динамической типизации (ибо не надо заранее опледелять что будет содержать «структура») но плох тем, что каждый такой объект занимает больше места, чем тупль (ибо словарь с собой тащит), поэтому если надо хранить большой массив элементов то лучше использовать вариант namedtuple - там на каждый элемент памяти надо столько же сколько и на простой тупль.
Но вообще везде где мне бы пришлось запоминать номера позиций в тупле вместо имени поля, использую этот метод. Например, если вдруг функция возвращает более одного параметра - проще использовать «rec».