0Pricing
Python Academy · บทเรียน

พื้นฐาน NamedTuple

สร้างระเบียนแบบเปลี่ยนแปลงไม่ได้ที่มีน้ำหนักเบา

พื้นฐาน NamedTuple เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

NamedTuple คืออะไร

ทูเพิลแบบมีชื่อคือทูเพิลที่ตำแหน่งต่าง ๆ มีชื่อด้วย คุณจะได้ทั้งคุณสมบัติที่มีน้ำหนักเบาและไม่เปลี่ยนแปลงของทูเพิล รวมถึงการเข้าถึงแอตทริบิวต์ที่อ่านเข้าใจง่าย เหมาะอย่างยิ่งสำหรับระเบียนขนาดเล็ก

ปัญหาของทูเพิลทั่วไป

ทูเพิลทั่วไปอ้างอิงตามตำแหน่ง คุณจึงต้องจำว่าดัชนีแต่ละตัวหมายถึงอะไร โค้ดอย่าง p[0] และ p[1] จึงผิดพลาดได้ง่าย

point = (1, 2)
print(point[0])  # x?
print(point[1])  # y?

การสร้างด้วย namedtuple

ตัวสร้าง collections.namedtuple จะสร้างคลาสย่อยของทูเพิลขึ้นมาใหม่ ให้ส่งชื่อชนิดข้อมูลและชื่อฟิลด์

from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p)

การเข้าถึงด้วยชื่อ

ตอนนี้คุณสามารถอ่านฟิลด์ด้วยชื่อแทนดัชนี ทำให้โค้ดอธิบายความหมายของตัวเองได้

from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p.x)
print(p.y)

ยังคงเป็นทูเพิล

ทูเพิลแบบมีชื่อยังคงเป็นทูเพิลจริง ดังนั้นการเข้าถึงด้วยดัชนี การคลายแพ็ก และการวนซ้ำจึงทำงานตามปกติ

from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p[0])
x, y = p
print(x, y)

ความไม่เปลี่ยนแปลง

เช่นเดียวกับทูเพิลทั้งหมด ทูเพิลแบบมีชื่อจะไม่เปลี่ยนแปลง การพยายามกำหนดค่าให้ฟิลด์จะทำให้เกิด AttributeError

from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
try:
    p.x = 99
except AttributeError as e:
    print('Cannot modify:', e)

การสร้างสำเนาที่แก้ไขแล้ว

เนื่องจากคุณไม่สามารถเปลี่ยนแปลงทูเพิลได้ ให้ใช้เมธอด _replace() เพื่อสร้างอินสแตนซ์ใหม่ที่มีบางฟิลด์เปลี่ยนแปลง

from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
q = p._replace(y=99)
print(p)
print(q)

การแปลงเป็นดิกชันนารี

เมธอด _asdict() จะคืนค่าฟิลด์ในรูปดิกชันนารี ซึ่งมีประโยชน์สำหรับการทำให้เป็นอนุกรมหรือการบันทึกข้อมูล

from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p._asdict())

การตรวจสอบฟิลด์

แอตทริบิวต์ _fields จะแสดงรายการชื่อฟิลด์ เหมาะสำหรับโค้ดทั่วไปที่วนซ้ำผ่านฟิลด์ของระเบียน

from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
print(Point._fields)

ค่าเริ่มต้น

กำหนดค่าเริ่มต้นด้วยอาร์กิวเมนต์ defaults ค่าเริ่มต้นจะใช้กับฟิลด์ทางขวาสุด เช่นเดียวกับค่าเริ่มต้นของพารามิเตอร์ฟังก์ชัน

from collections import namedtuple

Point = namedtuple('Point', ['x', 'y', 'z'], defaults=[0])
print(Point(1, 2))
print(Point(1, 2, 9))

การคืนค่าหลายค่า

ทูเพิลแบบมีชื่อเหมาะอย่างยิ่งสำหรับค่าที่ฟังก์ชันคืนกลับมา แทนที่จะคืนทูเพิลที่ไม่มีชื่อ ให้คืนทูเพิลแบบมีชื่อเพื่อให้ผู้เรียกอ่านฟิลด์ด้วยชื่อได้

from collections import namedtuple

Stats = namedtuple('Stats', ['minimum', 'maximum'])

def analyze(nums):
    return Stats(min(nums), max(nums))

r = analyze([3, 1, 9, 4])
print(r.minimum, r.maximum)

ตรวจสอบอย่างรวดเร็ว

คุณจะสร้างสำเนาที่แก้ไขแล้วของอินสแตนซ์ทูเพิลแบบมีชื่อได้อย่างไร

สรุปทบทวน

คุณได้เรียนรู้การสร้างระเบียนที่มีน้ำหนักเบาและไม่เปลี่ยนแปลง

  • namedtuple เพิ่มชื่อฟิลด์ให้กับทูเพิล
  • เข้าถึงฟิลด์ด้วยชื่อหรือดัชนีได้ และยังคลายแพ็กได้ตามปกติ
  • ใช้ _replace() เพื่อสร้างสำเนาที่แก้ไขแล้ว และใช้ _asdict() เพื่อแปลงค่า
  • _fields แสดงรายการชื่อ และ defaults กำหนดค่าเริ่มต้น

คำถามที่พบบ่อย

บทเรียน “พื้นฐาน NamedTuple” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “พื้นฐาน NamedTuple” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐาน NamedTuple”

สร้างระเบียนแบบเปลี่ยนแปลงไม่ได้ที่มีน้ำหนักเบา คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “พื้นฐาน NamedTuple” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม

ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. คลาส Enum
  2. IntEnum และ Flag
  3. พื้นฐาน NamedTuple
  4. typing.NamedTuple
← กลับไปที่ Python Academy