คิดว่า Namespace เหมือน "บริบทการทำงาน" (Evaluation Context) ที่แต่ละฟังก์ชัน โมดูล คลาส หรือแพ็กเกจ มีของตัวเอง
จุดสำคัญ
- เมื่อเริ่มทำงาน → สร้าง Namespace ใหม่
- เมื่อจบการทำงาน → Namespace หายไป ตัวแปรก็หายตาม
- มี Global Namespace สำรองไว้ หาไม่เจอใน Local จะมาหาที่นี่
ลำดับการค้นหา (LEGB Rule)
- L - Local: ภายในฟังก์ชัน/แลมบ์ดา
- E - Enclosing: ฟังก์ชันภายนอกที่ห่อหุ้ม (Nested Functions)
- G - Global: ระดับโมดูล
- B - Built-in: คำสั่งพื้นฐานของ Python (
print,len, etc.)
การสร้างตัวแปร
ปกติสร้างใน Local เท่านั้น ใช้ global หรือ nonlocal เพื่อเข้าถึงระดับนอก