Найти - Пользователи
Полная версия: вопрос по namedtuple
Начало » Python для новичков » вопрос по namedtuple
1
dobriy_dada
Здравствуйте, подскажите пожалуйста для чего в namedtuple нужен первый параметр:
Point = namedtuple('Point', ['x', 'y'])
это из документации
Тут “Point” повторяется 2 раза, зачем это нужно, почему нельзя было сделать вот так:
Point = namedtuple( ['x', 'y'])
p = Point(11, y=22)

Для что это повторение сделано, в чём логика?
Заранее спасибо
old_monty
dobriy_dada
подскажите пожалуйста для чего в namedtuple нужен первый параметр
Это нужно для того, чтобы создать новый класс - подкласс класса tuple, который будет называться Point. Название нового класса передается в 1-м параметре в виде строки, этот параметр обязательный и пропускать его нельзя.
dobriy_dada
Для что это повторение сделано, в чём логика?
Это не случайное повторение. Сначала производящей функции namedtuple() передается строка с названием нового класса, а для ссылки на возвращаемый этой функцией объект, который является новым классом, принимается название Point. (Да, в Python абсолютно все является объектами - классы, экземпляры этих классов и конечно же, функции - это тоже объекты). Конечно, не запрещается назвать ссылку на новый класс и другим именем. Но тогда будет сложнее работать с новым классом:
>>> Spam = namedtuple('Point', 'x, y')
>>> s = Spam(10, 20) # попробуем создать объект класса Spam
>>> s
Point(x=10, y=20)  # все равно это объект класса Point!

После того как новый класс создан, можно создавать экземпляры этого класса с использованием позиционных или именованных аргументов:
p = Point(11, y = 22) 
Созданный экземпляр похож на обычный кортеж, но к его полям можно обращаться по именам, а не только по индексам. Кроме того, у него обеспечено самодокументирование лучше, чем у обычного кортежа:
>>> t = 3, 4
>>> p = Point(11, y = 22)
>>> t
(3, 4)
>>> p
Point(x=11, y=22)
dobriy_dada
спасибо :-)
old_monty
dobriy_dada
спасибо :-)
Для спасибо здесь специальная кнопочка есть. :-) Зеленая, со знаком +
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB