ดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
 

    ตัวแปรในความหมายของคอมพิวเตอร์ภาษา Python เป็นการกำหนดชนิดของข้อมูล เพื่อนำไปใช้ในโปรแกรมโดยจะมีการเรียกตัวแปรไปใช้ในการคำนวณค่าหรือแสดงผลลัพธ์เป็นข้อมูลโดยภายในตัวแปร เราสามารถกำหนดชนิดของข้อมูลได้ เช่น numbers, string, list, tuple, dictionary เป็นต้น ตัวแปรเป็นคำนิยามที่ใช้ได้กับหลายภาษาไม่ว่าจะเป็น C# หรือ C++ โดยหลักการทำงานของแต่ละภาษาก็คือตัวแปรมีหน้าที่ในการเก็บข้อมูลโดยจะมีทั้งข้อมูลที่เป็นตัวเลขหรือตัวอักษรโดยที่ข้อมูลนั้นจะมีค่ามากกว่า 1 ข้อมูลก็ได้ขึ้นอยู่กับชนิดของตัวแปรและภาษาที่ใช้งาน ซึ่งในบทความนี้เราจะมาพูดถึงตัวแปรแบบ Global และ Local ในภาษาไพทอนกัน

ตัวแปรแบบ Global และ Local

     ตัวแปรที่ประกาศอยู่นอกฟังก์ชัน เราจะเรียกตัวแปรเหล่านี้ว่า ตัวแปรแบบ Global ส่วนตัวแปรที่ประกาศไว้ภายในฟังก์ชันจะถูกเรียกว่า ตัวแปรแบบ Local ซึ่งสิ่งที่เราต้องพิจารณาคือ ขอบเขตการอ้างถึงตัวแปร (Scope of Variable) ทั้งในและนอกฟังก์ชัน โดยมีหลักการดังนี้

- ภายในฟังก์ชัน เราสามารถอ้างตัวแปรแบบ Global ที่ประกาศอยู่นอกฟังก์ชันได้ ไม่ว่าตัวแปรนั้นจะประกาศไว้ก่อนหรือหลังฟังก์ชันก็ตาม

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

ตัวอย่าง

x = 10 #ตัวแปรแบบ Global

def var_scope():
    y = 99.99  #ตัวแปรแบบ Local
    print(x)   #สามารถอ้างถึงตัวแปรแบบ Global ได้
    print(y)
    print(z)   #สามารถอ้างถึงตัวแปรแบบ Global ได้ แม้จะประกาศไว้หลังฟังก์ชัน

z = 20 #ตัวแปรแบบ Global
var_scope() 
print(y) #ERROR เนื่องจากไม่สามารถอ้างถึงตัวแปรแบบ Local นอกฟังก์ชันได้

- ภายในฟังก์ชัน ถ้าเรานำตัวแปรแบบ Global มากำหนดค่าอย่างใดอย่างหนึ่งแล้ว ก็เหมือนการสร้างตัวแปรขึ้นมาใหม่ ซึ่งผลที่ได้ คือตัวแปรนั้นจะกลายเป็นตัวแปรแบบ Local แต่ก็จะไม่ส่งผลต่อตัวแปร Global เดิม และไม่ส่งผลต่อฟังก์ชันอื่นๆที่เรียกใช้ตัวแปรนั้น

ตัวอย่าง

x = 10

def func1():
    x = 99
    print(x)

def func2():
    print(x)

func1()
func2()

ผลลัพธ์

ผลลัพธ์การใช้งานตัวแปรแบบ Global และ Local
ผลลัพธ์

     อย่างไรก็ตาม อาจมีบางกรณีที่เราจำเป็นต้องแก้ไขค่าของตัวแปรแบบ Global ในฟังก์ชันใดฟังก์ชันหนึ่งและให้ส่งผลไปถึงฟังก์ชันอื่นๆ ที่เรียกใช้ตัวแปรแบบดังกล่าวด้วย ซึ่งเราสามารถทำการได้โดยการระบุคีย์เวิร์ด global นำหน้าชื่อตัวแปรดังกล่าว

ตัวอย่าง

x = 10

def func1():
    global x
    x = 99
    print(x)

def func2():
    print(x)

func1()
func2()

ผลลัพธ์

ผลลัพธ์การใช้งานคีย์เวิร์ด global เปลี่ยนข้อมูลตัวแปรแบบ Global
ผลลัพธ์การใช้ global

     จากผลลัพธ์ที่ออกมาจะเห็นได้ว่าฟังก์ชัน func2 ก็จะถูกผลกระทบจากการแก้ไขตัวแปรแบบ Global ด้วยคีย์เวิร์ด global ไปด้วย แต่ในการเปลี่ยนตัวแปรดังกล่าวนั้น ห้ามกำหนดหรือเปลี่ยนค่าของมันในขั้นตอนการระบุคีย์เวิร์ด global แต่ให้มาระบุใน statement อื่นๆแทน ดังในตัวอย่าง

 

 

ช่องทางศึกษาเพิ่มเติมเกี่ยวกับ : Python

Python - เทคนิคการเขียนไพทอน

Instance Method การเรียกใช้งานเมธอดผ่านอินสแตนซ์

Instance Attribute และ Initializer เมธอดชนิดพิเศษ

Static Method การใช้งานเมธอดแบบคงที่

การเรียกใช้ฟังก์ชันแบบ Recursion ในไพทอน ฟังชันก์ทำงานซ้ำเรียกตัวเอง

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
ทริป กางเต็นท์ ใกล้กรุงเทพ
โดย milk2533 จ 23 พ.ย. 2020 1:04 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
12
จ 23 พ.ย. 2020 1:04 pm โดย milk2533
- ให้เขียนประวัติ และ Job description ที่เคยทำมาแต่ละบริษัท โดยระบุประเภทธุรกิจที่เคยทำมา
โดย milk2533 จ 23 พ.ย. 2020 11:26 am บอร์ด M115 - กฤตวรรณ อาทิตย์ตั้ง
1
13
จ 23 พ.ย. 2020 4:34 pm โดย milk2533
list ความรู้ที่มี ว่าเคยเรียน หรือ เคยทำอะไรมาบ้าง
โดย milk2533 จ 23 พ.ย. 2020 11:26 am บอร์ด M115 - กฤตวรรณ อาทิตย์ตั้ง
3
22
จ 23 พ.ย. 2020 7:03 pm โดย milk2533
Work's on Hand กฤตวรรณ อาทิตย์ตั้ง M115
โดย milk2533 จ 23 พ.ย. 2020 11:24 am บอร์ด M115 - กฤตวรรณ อาทิตย์ตั้ง
0
3
จ 23 พ.ย. 2020 11:24 am โดย milk2533
note ส่วนตัว
โดย milk2533 จ 23 พ.ย. 2020 11:23 am บอร์ด M115 - กฤตวรรณ อาทิตย์ตั้ง
0
1
จ 23 พ.ย. 2020 11:23 am โดย milk2533
งานประจำวันที่ 23 พฤศจิกายน 2563
โดย milk2533 จ 23 พ.ย. 2020 11:21 am บอร์ด M115 - กฤตวรรณ อาทิตย์ตั้ง
2
28
จ 23 พ.ย. 2020 7:08 pm โดย milk2533
คำสั่งค้นหาไฟล์ จากขนาดของไฟล์
โดย mindphp จ 23 พ.ย. 2020 12:07 am บอร์ด Linux - Web Server
0
7
จ 23 พ.ย. 2020 12:07 am โดย mindphp
แก้ป้ญหา ภาษาไทย Error ใน Flask template ninja2 Error UnicodeDecodeError UnicodeDecodeError: 'ascii' codec can't decode
โดย mindphp ส 21 พ.ย. 2020 10:38 pm บอร์ด Python Knowledge
1
17
จ 23 พ.ย. 2020 12:22 pm โดย samay123