Python Scope ขอบเขตของตัวแปร

“Scope” คือขอบเขตของตัวแปรที่สามารถเข้าถึงได้ในโปรแกรม ขึ้นอยู่กับว่าเรากำหนดตัวแปรนั้นไว้ที่ใด ซึ่งมี 4 ประเภทของ Scope ที่สำคัญ คือ

  1. Local Scope (ขอบเขตภายในฟังก์ชัน)
  2. Enclosing Scope (ขอบเขตซ้อนกัน)
  3. Global Scope (ขอบเขตทั่วโปรแกรม)
  4. Built-in Scope (ขอบเขตภายใน Python)

Local Scope

ตัวแปรที่ประกาศภายในฟังก์ชันจะมีขอบเขตอยู่เฉพาะในฟังก์ชันนั้นเท่านั้น ไม่สามารถเรียกใช้งานได้จากภายนอกฟังก์ชัน

ตัวอย่าง

Python
def my_function():
    x = 10  # ตัวแปร x อยู่ใน Local Scope ของฟังก์ชัน
    print(x)  # สามารถใช้งานตัวแปร x ได้ภายในฟังก์ชัน

my_function()
print(x)  # จะเกิดข้อผิดพลาดเพราะ x ไม่อยู่ใน Global Scope

Enclosing Scope (ขอบเขตซ้อนกัน)

เกิดขึ้นเมื่อมีฟังก์ชันซ้อนอยู่ในฟังก์ชันอีกชั้นหนึ่ง ตัวแปรที่ประกาศในฟังก์ชันภายนอกสามารถถูกเข้าถึงได้ในฟังก์ชันภายใน

ตัวอย่าง

Python
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 และสามารถเรียกใช้งานได้จากทุกที่ในโปรแกรม (ยกเว้นในฟังก์ชันที่มีการสร้างตัวแปรชื่อเดียวกัน)

ตัวอย่าง

Python
x = 50  # ตัวแปร x อยู่ใน Global Scope

def my_function():
    print(x)  # ฟังก์ชันสามารถเข้าถึงตัวแปร x ได้

my_function()
print(x)  # ตัวแปร x ยังสามารถใช้งานได้ในระดับ Global

ถ้าต้องการเปลี่ยนค่า Global Variable ในฟังก์ชัน ต้องใช้คำสั่ง global เพื่อระบุว่าต้องการใช้ตัวแปร Global

Python
x = 50

def change_value():
    global x  # ระบุว่าเรากำลังแก้ไขตัวแปร Global
    x = 100

change_value()
print(x)  # จะพิมพ์ค่า 100

Built-in Scope

เป็นขอบเขตของฟังก์ชันหรือค่าที่มีอยู่แล้วใน Python เช่น print(), len() ซึ่งสามารถเรียกใช้งานได้ทุกที่ในโปรแกรม

ตัวอย่าง

Python
x = len([1, 2, 3])  # len() เป็นฟังก์ชันใน Built-in Scope
print(x)  # พิมพ์ค่า 3

คำสั่ง nonlocal

ใช้เพื่ออ้างถึงตัวแปรจากฟังก์ชันภายนอก (enclosing function) แต่ไม่ใช่ Global Scope

ตัวอย่าง

Python
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 จะช่วยให้เราจัดการตัวแปรในโค้ดได้อย่างมีประสิทธิภาพมากขึ้น

แชร์เรื่องนี้