namedtuple._replace() работает не так, как описано в документации

StackOverflow https://stackoverflow.com/questions/2166147

  •  24-09-2019
  •  | 
  •  

Вопрос

У меня возникли проблемы с реализацией 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

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

Это было полезно?

Решение

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

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

родовое слово

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

Другие советы

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

родовое слово

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

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

>>> 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 того же типа, но с измененными значениями.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top