namedtuple._replace () не работает, как описано в документации - PullRequest
40 голосов
/ 30 января 2010

У меня были проблемы с реализацией namedtuple._replace(), поэтому я скопировал код сразу из документации:

Point = namedtuple('Point', 'x,y')

p = Point(x=11, y=22)

p._replace(x=33)

print p

и я получил:

Point(x=11, y=22)

вместо:

Point(x=33, y=22)

как показано в документе.

Я использую Python 2.6 в Windows 7

Что происходит?

Ответы [ 4 ]

88 голосов
/ 30 января 2010

Да, работает, точно так, как задокументировано.

._replace возвращает новый именованный кортеж, он не изменяет оригинал, поэтому вам нужно написать это:

p = p._replace(x=33)

См. Здесь: somenamedtuple._replace (kwargs) для получения дополнительной информации.

15 голосов
/ 30 января 2010

Кортеж неизменен._replace() возвращает новый кортеж с вашими модификациями:

p = p._replace(x=33)
11 голосов
/ 30 января 2010

namedtuple._replace() возвращает новый кортеж; оригинал без изменений.

6 голосов
/ 30 января 2010

Мне кажется, что namedtuple неизменен, как и его предшественник, кортеж.

>>> from collections import namedtuple
>>> Point = namedtuple('Point', 'x,y')
>>>
>>> p = Point(x=11, y=22)
>>>
>>> p._replace(x=33)
Point(x=33, y=22)
>>> print(p)
Point(x=11, y=22)
>>> p = p._replace(x=33)
>>> print(p)
Point(x=33, y=22)

NamedTuple._replace возвращает новый NamedTuple того же типа, но с измененными значениями.

...