55

の実装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)

ドキュメントに示されているように。

Windows 7でPython 2.6を使用しています

どうしたの?

4

5 に答える 5

112

はい、文書化されているとおりに動作します。

._replace 新しい名前付きタプルを返します。元のタプルは変更されないため、次のように記述する必要があります。

p = p._replace(x=33)

詳細については、 somenamedtuple._replace(kwargs)を参照してください。

于 2010-01-30T00:07:43.783 に答える
17

タプルは不変です。_replace()変更を加えた新しいタプルを返します。

p = p._replace(x=33)
于 2010-01-30T00:07:24.330 に答える
11

namedtuple._replace()新しいタプルを返します。オリジナルは変更されません。

于 2010-01-30T00:07:17.810 に答える
6

私には、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._replaceNamedTuple同じ型の new を返しますが、値は変更されています。

于 2010-01-30T00:11:37.680 に答える