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 عائدات اسم جديد ، لا يعدل الأصل ، لذلك تحتاج إلى كتابة هذا:

p = p._replace(x=33)

انظر هنا: somenamedtuple._replace (kwargs) للمزيد من المعلومات.

نصائح أخرى

توبل غير قابل للتغيير. _replace() إرجاع Tuple جديد مع تعديلاتك:

p = p._replace(x=33)

namedtuple._replace() إرجاع tuple جديد. الأصلي لم يتغير.

يبدو لي كما لو أن اسمه غير قابل للتغيير ، مثل أسلافه ، 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