Stdlib, Testing และ Tooling
Batteries included
หัวข้อที่มีชื่อว่า “Batteries included”Python มาพร้อมกับปรัชญาที่เรียกว่า “batteries included”: standard library มีการ implement พร้อมใช้สำหรับงานที่โปรแกรมส่วนใหญ่ต้องการ — โดยไม่ต้องพึ่ง third-party package เมื่อติดตั้ง Python คุณจะได้รับ module สำหรับ collections, การจัดการข้อมูล, networking, file I/O, testing, serialisation, concurrency และอีกมากมายโดยอัตโนมัติ
Standard library ครอบคลุมมากกว่า 200 module
ก่อนที่จะใช้ pip ให้ตรวจสอบก่อนว่า stdlib module แก้ปัญหาของคุณได้หรือไม่ — จะ import ได้เร็วกว่า, เข้ากันได้กับ Python version ของคุณเสมอ และได้รับความเชื่อถือจากผู้ใช้นับล้าน
แนวทาง Python tooling สมัยใหม่
หัวข้อที่มีชื่อว่า “แนวทาง Python tooling สมัยใหม่”โปรเจกต์ Python สำหรับ production มักพึ่งพา tool ชุดเล็กๆ:
venv— สร้าง virtual environment แบบ isolated เพื่อไม่ให้ dependency ของโปรเจกต์หนึ่งปนกับอีกโปรเจกต์pip— ติดตั้ง third-party package จาก PyPI ควรใช้หลังจากยืนยันแล้วว่า stdlib ช่วยไม่ได้pyproject.toml— ไฟล์มาตรฐาน PEP-517 สมัยใหม่สำหรับประกาศ package metadata, build backend และการตั้งค่า tool (แทนที่setup.py+setup.cfgแบบเก่า)pytest— test runner มาตรฐานโดยพฤตินัยสำหรับโปรเจกต์ Python ซึ่งสร้างบนunittestของ stdlib ด้วย API ที่เป็นมิตรกว่า
คุณจะได้ศึกษา unittest และ pytest ในบทเรียนถัดไปของ chapter นี้
ตอนนี้ นิสัยสำคัญคือ: ใช้ stdlib ก่อนเสมอ
ลิ้มลองสั้นๆ: stdlib สามโมดูลในการใช้งานจริง
หัวข้อที่มีชื่อว่า “ลิ้มลองสั้นๆ: stdlib สามโมดูลในการใช้งานจริง”Demo ด้านล่างใช้สามโมดูลที่คุณจะพบบ่อยมาก:
collections.Counter— นับ hashable object ในรอบเดียวitertools.islice— ตัด iterator ใดก็ได้อย่าง lazy โดยไม่ต้อง materialize ก่อนjson— แปลง Python object เป็น JSON string และแปลงกลับ
import collectionsimport itertoolsimport json
# Count word frequencieswords = "the quick brown fox jumps over the lazy dog the fox".split()counter = collections.Counter(words)print("Top 3 words:", counter.most_common(3))
# First 5 squares using itertoolssquares = list(itertools.islice((x*x for x in range(1, 100)), 5))print("First 5 squares:", squares)
# JSON round-trippayload = json.dumps({"lang": "Python", "batteries": True})data = json.loads(payload)print("Parsed:", data["lang"], "batteries:", data["batteries"])Loading Python runtime (first run only)…