Libro

Learning Python ฉบับที่ 6: ตำรา Python แกนภาษาสำหรับ Python 3.12

Learning Python ฉบับที่ 6 ของ Mark Lutz ปรับเนื้อหาใหม่ให้ตรงกับ Python 3.12 ขึ้นไปและตัด Python 2 ออก บทความนี้สรุปจากหน้าหนังสือบนเว็บไซต์ผู้เขียน และอ่านตัวอย่างบทที่ 39 Decorators ที่ผู้เขียนเผยแพร่บนเว็บไซต์

ภาพประกอบบทความ: ปกหนังสือ Learning Python โดย Mark Lutz

ขอบเขตของบทความ: สรุปจากหน้าหนังสือบนเว็บไซต์ของผู้เขียน หน้าโค้ดตัวอย่าง ข้อมูลบรรณานุกรมจาก Google Books และอ่านตัวอย่างบทที่ 39 Decorators หน้า 1031–1038 ที่ผู้เขียนเผยแพร่บนเว็บไซต์ ยังไม่ได้อ่านบทอื่น และไม่ได้เห็นสารบัญฉบับเต็ม

คนที่อยากใช้ Python ทำงานด้านข้อมูลหรือเขียนระบบเทรดมักเริ่มจากบทเรียนสั้น ๆ หรือโค้ดตัวอย่างของ library แล้วไปติดเมื่อต้องอ่านโค้ดคนอื่นที่ใช้ decorator, class หรือ generator หนังสือที่อธิบายแกนของภาษาเป็นระบบช่วยปิดช่องว่างตรงนี้ได้

Learning Python เป็นตำราแบบนั้น บทความนี้ดูว่าฉบับที่ 6 เปลี่ยนอะไรจากฉบับก่อน วิธีเขียนในบทที่ได้อ่านเป็นอย่างไร และเหมาะกับใคร

หนังสือเล่มนี้ว่าด้วยอะไร

Learning Python: Powerful Object-Oriented Programming ฉบับที่ 6 เขียนโดย Mark Lutz ตีพิมพ์โดย O'Reilly Media ข้อมูลบรรณานุกรมบน Google Books ระบุปี 2025 และ ISBN 9781098171261 ปกในโฟลเดอร์หนังสือเป็นปกฉบับที่ 6 ตรงกัน

หน้าหนังสือบนเว็บไซต์ผู้เขียน ระบุว่าฉบับสมบูรณ์ออกเมื่อ 25 กุมภาพันธ์ 2025 ฉบับพิมพ์ยาว 1,169 หน้า ส่วน ebook และฉบับออนไลน์ส่วนใหญ่ยาว 1,267 หน้า ผู้เขียนบอกว่าหนังสือยังคงเน้นแกนของภาษาและหลักคิดพื้นฐานที่ผู้อ่านนำไปสร้างวิธีแก้ปัญหาเองได้

ฉบับที่ 6 เปลี่ยนอะไร

ตามหน้าหนังสือของผู้เขียน (learning-python.com):

  • ตัด Python 2.X ออก และปรับเนื้อหาให้ตรงกับ Python 3.12 ขึ้นไป

  • เพิ่มหัวข้อใหม่ของ Python 3 เช่น f-string, assignment expression, คำสั่ง match, type hint, async coroutine, exception group และ positional-only argument

  • ให้ความสำคัญกับแพลตฟอร์มนอก Windows มากขึ้น รวมถึงสมาร์ตโฟน

  • สั้นลง ฉบับ ebook สั้นลงราว 350 หน้า และฉบับพิมพ์ราว 450 หน้าเมื่อเทียบกับฉบับที่ 5

  • ย้ายสองบทขั้นสูงออนไลน์สำหรับฉบับพิมพ์ คือบทที่ 38 Managed Attributes และบทที่ 39 Decorators ซึ่งยังอยู่ครบใน ebook (หน้าบทออนไลน์)

เนื้อหาครอบคลุมหัวข้ออะไร

ยังไม่ได้เห็นสารบัญฉบับเต็ม หน้า O'Reilly ปฏิเสธการเข้าถึงระหว่างค้นข้อมูล สิ่งที่ยืนยันได้มีดังนี้

  • ชุด โค้ดตัวอย่าง แยกโฟลเดอร์ตามบท โฟลเดอร์ที่มีอยู่ไล่ตั้งแต่บทที่ 2 ถึงบทที่ 41 และภาคผนวก A กับ B (รายการโฟลเดอร์) แสดงว่าหนังสือมีอย่างน้อย 41 บท

  • คำอธิบายบน Google Books ระบุหัวข้อหลัก เช่น ชนิดข้อมูลในตัวอย่าง string, list, dictionary และ file, ฟังก์ชันและ functional programming, module และ package, exception, object-oriented programming ด้วย class และเครื่องมือขั้นสูงอย่าง decorator, descriptor และ metaclass

  • บทที่ 39 อ้างถึงบทอื่นไว้หลายจุด เช่น บทที่ 29 เรื่อง abstract superclass บทที่ 31 เรื่อง delegation บทที่ 32 เรื่อง property และ static/class method และบทถัดไปเรื่อง metaclass

สิ่งที่เห็นจากตัวอย่างบทที่ 39 Decorators

บทที่ 39 เปิดด้วยการบอกว่าเป็นหัวข้อค่อนข้างสูงที่คนสร้างเครื่องมือจะสนใจมากกว่าคนเขียนแอปพลิเคชัน แต่เพราะ framework ยอดนิยมใช้ decorator มากขึ้น ความเข้าใจพื้นฐานจึงช่วยให้ผู้ใช้ไม่มองมันเป็นกล่องดำ ผู้เขียนยังวางบทนี้เป็นกรณีศึกษาที่ตัวอย่างใหญ่กว่าบทก่อน ๆ (หน้า 1031)

แนวทางอธิบายในหน้าที่อ่านคือเริ่มจากกลไกก่อน syntax ผู้เขียนอธิบายว่า decorator คือการผูกชื่อฟังก์ชันหรือคลาสใหม่โดยอัตโนมัติเมื่อจบคำสั่ง def หรือ class แล้วแสดงว่า @decorator เหนือ def F เทียบเท่ากับ F = decorator(F) (หน้า 1034–1035) จากนั้นจึงแสดงสองรูปแบบที่ใช้บ่อย คือ nested function ที่คืน wrapper และคลาสที่มี __call__ พร้อมชี้จุดที่มักพลาด คือ decorator แบบคลาสใช้กับ method ไม่ได้ตรง ๆ เพราะ self ของ __call__ เป็น instance ของ decorator ไม่ใช่ของคลาสที่ถูกตกแต่ง (หน้า 1036–1037)

ผู้เขียนยังพูดถึงข้อเสียด้วย เช่น wrapper อาจเปลี่ยนชนิดของ object และเพิ่มการเรียกฟังก์ชัน (หน้า 1033) ซึ่งเป็นเรื่องที่คนเขียนโค้ดที่ต้องการความเร็วควรรู้

ตัวอย่างประกอบ (ของบทความนี้ ไม่ได้มาจากหนังสือ): ถ้าใช้ library ที่ให้เขียน @lru_cache เหนือฟังก์ชันคำนวณ indicator ความเข้าใจว่าบรรทัดนั้นคือ f = lru_cache(f) ช่วยให้ตามได้ว่าทำไมฟังก์ชันที่ได้กลับมาจึงมีพฤติกรรมต่างจากเดิม

เหมาะกับใคร และใครควรเริ่มจากเล่มอื่นก่อน

  • เหมาะ กับคนที่ต้องการเข้าใจแกนภาษา Python อย่างละเอียด ทั้งคนเริ่มเขียนโปรแกรมและนักพัฒนาที่มาจากภาษาอื่น ตามที่คำอธิบายบน Google Books ระบุ

  • เหมาะ กับคนที่ใช้ pandas หรือ framework ต่าง ๆ อยู่แล้ว แต่อยากอ่านโค้ดที่ใช้ class, decorator และ module ได้คล่องขึ้น

  • อาจไม่ตรงความต้องการ ถ้าต้องการหนังสือเรื่องการวิเคราะห์ข้อมูลหรือการเงินโดยตรง หน้าผู้เขียนระบุว่าหนังสือเน้นแกนภาษา และคำอธิบายหนังสือไม่ได้กล่าวถึง library ด้านข้อมูล

  • ความยาวกว่าพันหน้าเหมาะกับการอ่านเป็นตำราอ้างอิงมากกว่าอ่านจบในเวลาสั้น

ข้อจำกัดของข้อมูลที่ใช้ในบทความนี้

  • อ่านเฉพาะบทที่ 39 หน้า 1031–1038 จากไฟล์ที่ผู้เขียนเผยแพร่ ไม่ได้อ่านบทอื่น

  • ไม่ได้เห็นสารบัญฉบับเต็ม จำนวนบทอนุมานจากชื่อโฟลเดอร์โค้ดตัวอย่าง ซึ่งไม่มีโฟลเดอร์ของบทที่ 1, 5, 6 และ 8

  • จำนวนหน้าต่างกันตามรูปแบบ Google Books แสดง 1172 หน้า ส่วนผู้เขียนระบุ 1,169 หน้าสำหรับฉบับพิมพ์และ 1,267 หน้าสำหรับ ebook ส่วนใหญ่

  • ไม่ได้รันโค้ดตัวอย่างของหนังสือ

แหล่งอ้างอิง

  • ปกหนังสือ Learning Python

    Learning Python

    Mark Lutz

    ฉบับที่ 6 ปี 2025 เน้นแกนภาษา Python 3.12 ขึ้นไป ตั้งแต่ชนิดข้อมูลพื้นฐานจนถึง decorator และ metaclass พร้อมโค้ดตัวอย่างแยกตามบท

    ดูรายละเอียด

บทความนี้อ่านจบได้ในตัวเอง หนังสือด้านบนคือจุดต่อยอดสำหรับผู้ที่ต้องการศึกษาลึกขึ้น