Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 21, 2016 22:15:14

dobriy_dada
Зарегистрирован: 2015-09-04
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по namedtuple

Здравствуйте, подскажите пожалуйста для чего в namedtuple нужен первый параметр:

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

Для что это повторение сделано, в чём логика?
Заранее спасибо

Отредактировано dobriy_dada (Июнь 21, 2016 22:16:03)

Офлайн

#2 Июнь 21, 2016 23:31:12

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

вопрос по namedtuple

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)

Отредактировано old_monty (Июнь 22, 2016 00:21:13)

Офлайн

#3 Июнь 22, 2016 05:11:52

dobriy_dada
Зарегистрирован: 2015-09-04
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по namedtuple

спасибо :-)

Офлайн

#4 Июнь 22, 2016 08:16:43

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

вопрос по namedtuple

dobriy_dada
спасибо :-)
Для спасибо здесь специальная кнопочка есть. :-) Зеленая, со знаком +

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version