“Scope” คือขอบเขตของตัวแปรที่สามารถเข้าถึงได้ในโปรแกรม ขึ้นอยู่กับว่าเรากำหนดตัวแปรนั้นไว้ที่ใด ซึ่งมี 4 ประเภทของ Scope ที่สำคัญ คือ
- Local Scope (ขอบเขตภายในฟังก์ชัน)
- Enclosing Scope (ขอบเขตซ้อนกัน)
- Global Scope (ขอบเขตทั่วโปรแกรม)
- Built-in Scope (ขอบเขตภายใน Python)
Local Scope
ตัวแปรที่ประกาศภายในฟังก์ชันจะมีขอบเขตอยู่เฉพาะในฟังก์ชันนั้นเท่านั้น ไม่สามารถเรียกใช้งานได้จากภายนอกฟังก์ชัน
ตัวอย่าง
def my_function():
x = 10 # ตัวแปร x อยู่ใน Local Scope ของฟังก์ชัน
print(x) # สามารถใช้งานตัวแปร x ได้ภายในฟังก์ชัน
my_function()
print(x) # จะเกิดข้อผิดพลาดเพราะ x ไม่อยู่ใน Global ScopeEnclosing Scope (ขอบเขตซ้อนกัน)
เกิดขึ้นเมื่อมีฟังก์ชันซ้อนอยู่ในฟังก์ชันอีกชั้นหนึ่ง ตัวแปรที่ประกาศในฟังก์ชันภายนอกสามารถถูกเข้าถึงได้ในฟังก์ชันภายใน
ตัวอย่าง
def outer_function():
x = 20 # ตัวแปร x อยู่ใน Enclosing Scope
def inner_function():
print(x) # inner_function สามารถเข้าถึงตัวแปร x ที่ประกาศใน outer_function ได้
inner_function()
outer_function()Global Scope
ตัวแปรที่ประกาศนอกฟังก์ชันหรือคลาสจะมีขอบเขตเป็น Global และสามารถเรียกใช้งานได้จากทุกที่ในโปรแกรม (ยกเว้นในฟังก์ชันที่มีการสร้างตัวแปรชื่อเดียวกัน)
ตัวอย่าง
x = 50 # ตัวแปร x อยู่ใน Global Scope
def my_function():
print(x) # ฟังก์ชันสามารถเข้าถึงตัวแปร x ได้
my_function()
print(x) # ตัวแปร x ยังสามารถใช้งานได้ในระดับ Globalถ้าต้องการเปลี่ยนค่า Global Variable ในฟังก์ชัน ต้องใช้คำสั่ง global เพื่อระบุว่าต้องการใช้ตัวแปร Global
x = 50
def change_value():
global x # ระบุว่าเรากำลังแก้ไขตัวแปร Global
x = 100
change_value()
print(x) # จะพิมพ์ค่า 100Built-in Scope
เป็นขอบเขตของฟังก์ชันหรือค่าที่มีอยู่แล้วใน Python เช่น print(), len() ซึ่งสามารถเรียกใช้งานได้ทุกที่ในโปรแกรม
ตัวอย่าง
x = len([1, 2, 3]) # len() เป็นฟังก์ชันใน Built-in Scope
print(x) # พิมพ์ค่า 3คำสั่ง nonlocal
ใช้เพื่ออ้างถึงตัวแปรจากฟังก์ชันภายนอก (enclosing function) แต่ไม่ใช่ Global Scope
ตัวอย่าง
def outer_function():
x = 10
def inner_function():
nonlocal x # ระบุว่าเรากำลังใช้งานตัวแปรจากฟังก์ชันภายนอก
x = 20
inner_function()
print(x) # พิมพ์ค่า 20 เพราะค่า x ถูกเปลี่ยนใน inner_function
outer_function()สรุป
การใช้งาน Scope ใน Python แบ่งออกเป็น 4 รูปแบบหลักคือ Local, Enclosing, Global และ Built-in การเข้าใจ Scope จะช่วยให้เราจัดการตัวแปรในโค้ดได้อย่างมีประสิทธิภาพมากขึ้น
