Tuple ธรรมดาใช้ index เข้าถึงค่า ซึ่งอ่านยากและง่ายผิดพลาด Named Tuple แก้ปัญหานี้โดยให้ชื่อฟิลด์แต่ละตำแหน่ง
Tuple ธรรมดา vs Named Tuple
>> # Tuple ธรรมดา
>>> student = (1, "Ravi", 23, 546)
>>> rollno = student[0]
>>> name = student[1]
>>> age = student[2]
>>> marks = student[3]
# Named Tuple
>>> from collections import namedtuple
>>> Student = namedtuple('Student', ['rollno', 'name', 'age', 'marks'])
>>> s1 = Student(1, "Ravi", 23, 546)
>>> s1
Student(rollno=1, name='Ravi', age=23, marks=546)
>>> s1.rollno, s1.name, s1.age, s1.marks
(1, 'Ravi', 23, 546)
คุณสมบัติ Named Tuple
- เข้าถึงค่าได้ทั้ง ชื่อฟิลด์ (
s1.name) และ index (s1[1]) - Immutable เหมือน tuple ธรรมดา
- มี memory footprint ต่ำกว่า class ปกติ
- มี docstring และ representation อ่านง่าย
- รองรับ
_replace()สร้าง instance ใหม่บางฟิลด์เปลี่ยน - รองรับ
_asdict()แปลงเป็น OrderedDict
ตัวอย่างเพิ่มเติม
>> s1._replace(marks=600)
Student(rollno=1, name='Ravi', age=23, marks=600)
>>> s1._asdict()
OrderedDict([('rollno', 1), ('name', 'Ravi'), ('age', 23), ('marks', 546)])
>>> # สร้างจาก iterable
>>> Student._make([2, "Priya", 22, 580])
Student(rollno=2, name='Priya', age=22, marks=580)