วันอาทิตย์ที่ 26 กุมภาพันธ์ พ.ศ. 2560

6.3 ขอบเขตของตัวแปร python

6.3 ขอบเขตของตัวแปร 

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


ตัวแปรและชนิดของตัวแปรที่ได้กล่าวไว้ในบทที่ 1 และ 2 ไปแล้วนั้น เป็นการใช้ตัวแปรที่สร้างขึ้นเฉพาะโปรแกรมหลักเท่านั้น ซึ่งเป็นการเรียกใช้ที่ไม่ซับซ้อน แต่เมื่อนำไปใช้กับการประกาศตัวแปรระหว่างที่อยู่ในโปรแกรมหลักกับตัวแปรที่อยู่ในฟังก์ชันอื่น ๆ ที่สร้างขึ้นมาเพิ่มเติม จำเป็นต้องทราบกฎเกณฑ์การใช้ ได้แก่ ขอบเขตของตัวแปร กล่าวคือ ตัวแปรที่อยู่ในโปรแกรมหลัก จะเรียกว่า ตัวแปรชนิดโกลบอล (global) ส่วนตัวแปรที่อยู่ในฟังก์ชันเรียกว่า ตัวแปรชนิดโลคอล (local) ซึ่งมีรายละเอียดดังต่อไปนี้

1. ตัวแปรชนิดโกลบอล  
                ตัวแปรชนิดโกลบอลจะประกาศไว้ในส่วนของโปรแกรมหลัก คุณสมบัติของ    ตัวแปรประเภทนี้ จะสามารถเข้าถึงได้ทั่วทั้งโปรแกรม ทั้งในส่วนของตัวแปรโลคอลที่ประกาศไว้ในฟังก์ชันและตัวแปรโกลบอลที่ประกาศไว้ในโปรแกรมหลัก เงื่อนไขการทำงานจะมีดังนี้

1.1  กรณีที่มีชื่อตัวแปรต่างกัน ทั้งโกลบอลและโลคอล ให้มีการประมวลผลตามปกติ แต่โปรแกรมหลักจะไม่สามารถเรียกใช้ตัวแปรโลคอลได้   
1.2  กรณีเรียกใช้ตัวแปรโกลบอลในส่วนของฟังก์ชัน แต่ไม่มีการประกาศชื่อ  ตัวแปรในฟังก์ชันเป็นชื่อเดียวกันกับตัวแปรโกลบอล สามารถเรียกใช้ตัวแปรโกลบอลได้ตลอดเวลา
1.3  กรณีที่ชื่อตัวแปรชนิดโกลบอลมีชื่อเดียวกับตัวแปรชนิดโลคอล ผลการทำงานของโปรแกรม เมื่อเรียกใช้ตัวแปรชื่อนี้ที่โปรแกรมหลัก โปรแกรมจะประมวลผลกับ  ตัวแปรโกลบอล แต่ถ้าประมวลผลในส่วนของฟังก์ชัน จะประมวลผลที่ตัวแปรโลคอล ดังภาพที่ 6.14

ภาพที่ 6.14 แสดงคำสั่งการประกาศตัวแปร


จากภาพที่ 6.14 เป็นคำสั่งตัวอย่างการเกิดกรณีที่ชื่อตัวแปรชื่อเดียวกันทั้งที่อยู่ในฟังก์ชันและโปรแกรมหลัก คือ total เป็นตัวแปรโกลบอล (บรรทัดที่ 1) และโลคอล (บรรทัดที่-3, 4, 5) ซึ่งมีความหมายเป็นตัวแปรคนละส่วนกัน แต่ชื่อเดียวกัน
                บรรทัดแรกได้กำหนดให้ total = 0
                บรรทัดที่ 2 เป็นการสร้างฟังก์ชันชื่อ sum โดยมีอาร์กิวเมนต์ 2 ตัวแปร คือ arg1 และ arg2 ทำหน้าที่รอรับค่าจากการเรียกใช้ฟังก์ชันที่ชื่อเดียวกัน ทั้ง 2 ค่า
                บรรทัดที่ 3 เป็นการประมวลผลโดยเอาตัวแปรที่รับค่ามาจาก arg1 และ arg2 แล้วนำมารวมกัน นำผลรวมไปเก็บที่ตัวแปร total
                บรรทัดที่ 4 และ 5 เป็นคำสั่งแสดงผลและส่งค่ากลับ
                บรรทัดที่ 6 เป็นโปรแกรมหลัก เป็นการเรียกใช้ฟังก์ชัน sum โดยส่งค่า             อาร์กิวเมนต์ 20 ให้กับตัวแปร arg1 และค่า 30 ให้กับตัวแปร arg2 ตามลำดับ
                บรรทัดสุดท้าย เป็นการสั่งแสดงผลตัวแปร total  ผลการประมวลผลดังภาพที่ 6.15

ภาพที่ 6.15  แสดงผลลัพธ์ของโปรแกรม

ผลการทำงานจะเห็นว่าบรรทัดแรกจะแสดงผลของฟังก์ชัน sum ซึ่งเกิดจาก arg1 รับค่า 20 นำมาบวกกับ arg2 ซึ่งรับค่า 30 แล้วเก็บที่ตัวแปร total ดังนั้นเมื่อสั่งแสดงผลในฟังก์ชัน sum ผลที่ได้จึงทำให้ตัวแปร total จึงมีค่าเท่ากับ 50 ในขณะที่ผลลัพธ์ของบรรทัดที่ 2 แสดงค่า total มีค่าเป็น 0 จึงเป็นการนำเอาค่าจากตัวแปร total ในบรรทัดที่ 1 ซึ่งเป็นตัวแปรชนิดโกลบอลมาแสดง

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

ภาพที่ 6.16  แสดงคำสั่งการใช้ตัวแปรโลคอลและโกลบอล


จากภาพที่ 6.16 เป็นคำสั่งการเขียนฟังก์ชัน 3 ฟังก์ชัน ประกอบด้วยฟังก์ชัน setvar1 setvar2 และ setvar3 ดังนี้

                ฟังก์ชัน setvar1 มีอาร์กิวเมนต์ 2 ตัว คือ a และ b โดยมีตัวแปร ชนิดโลคอลเป็น b เก็บค่า 10 เอาไว้ บรรทัดถัดจากนั้นเป็นการแสดงผลการเอาตัวแปร a และ b คูณกัน จากนั้นส่งค่ากลับ
                ฟังก์ชัน setvar2 เป็นฟังก์ชันที่รอรับอาร์กิวเมนต์ 2 ค่า ได้แก่ c และ d แล้วส่งค่าผลคูณของตัวแปรทั้งสองออกไป
                ฟังก์ชันสุดท้าย ได้แก่  setvar3  เป็นฟังก์ชันที่ไม่มีอาร์กิวเมนต์รอรับค่าใด ๆ เข้ามา แต่มีตัวแปรที่เป็นชนิดโลคอล 2 ตัว ได้แก่ a และ b การประมวลผลโดยการสั่งแสดงผลการคูณตัวแปรของ a และ b
                สำหรับโปรแกรมหลักได้กำหนดตัวแปรชนิดโกลบอล a เก็บค่า 20 และ b เก็บค่า 15  คำสั่งถัดจากนั้นเป็นคำสั่งให้แสดงผลตัวแปร a และ b ถัดจากนั้นเรียกใช้ฟังก์ชัน setvar1 โดยส่งตัวแปร a และ b ไปด้วย คำสั่งถัดไปเป็นคำสั่งให้แสดงผลผลการประมวลผลของฟังก์ชัน setvar2  บรรทัดสุดท้ายเป็นการเรียกใช้ฟังก์ชัน setvar3  ผลการทำงานของโปรแกรมดังภาพที่ 6.17

ภาพที่ 6.17  แสดงผลลัพธ์ของโปรแกรม

จากภาพที่ 6.17 เป็นผลลัพธ์ของโปรแกรมจากภาพที่ 6.16 ดังนี้
                ผลลัพธ์ของบรรทัดที่ 1 เกิดจากการสั่งแสดงผลตัวแปรชนิดโกลบอล ซึ่งกำหนดให้ a = 20 และ b = 15 แม้ว่าตัวแปร b จะถูกกำหนดเอาไว้ในฟังก์ชัน setvar1 และ setvar3 เป็น 10 ก็ตาม แต่ตัวแปรจากฟังก์ชันทั้งสองต่างเป็นอิสระต่อกัน ดังนั้นจึงแสดงค่า 20 และ 15 ออกมา

                ผลลัพธ์ของบรรทัดที่ 2 เกิดจากการเรียกใช้ฟังก์ชัน setvar1 โดยส่งอาร์กิวเมนต์ ตัวแปร a และ b ซึ่งตัวแปรนี้เป็นชนิดโกลบอลจึงส่งค่า a = 20 และ b = 15 ออกไปด้วย เมื่อฟังก์ชัน setvar1 ถูกเรียกใช้ ดังนั้นเมื่อพิจารณาที่ฟังก์ชัน setvar1  อาร์กิวเมนต์ a จะรับค่า 20 และ b จะรับค่า 15 เข้ามาในฟังก์ชันนี้ แต่ภายในฟังก์ชัน setvar1 ได้กำหนดให้ตัวแปร b = 10 ดังนั้น ตัวแปรที่เหมือนกันระหว่างชนิดโกลบอลและโลคอลภายใน ดังนั้นเมื่อเรียกใช้ประมวลผลภายในฟังก์ชัน ตัวแปร b = 10 ที่เป็นชนิดโลคอลจึงได้รับการประมวลผล ผลลัพธ์ที่ได้ เมื่อสั่ง  a * b จึงได้ค่าเท่ากับ 200
                 ผลลัพธ์ของบรรทัดที่ 3 เป็นผลลัพธ์ที่เกิดจากคำสั่งให้แสดงผลการเรียกใช้ฟังก์ชัน setvar2 ซึ่งฟังก์ชัน setvar2 มีอาร์กิวเมนต์รับค่า 2 ตัวแปร คือ c และ d เมื่อเรียกใช้ฟังก์ชัน setvar2(a, b) ตัวแปร a = 20 และ b = 15 จากโปรแกรมหลักจึงถูกส่งไปให้กับ c และ d  ตามลำดับ ดังนั้น c จะเก็บค่า 20และ d จะเก็บค่า 15 ดังนั้นเมื่อสั่งให้ส่งค่ากลับผลการคูณของค่าทั้งสองจึงได้ผลลัพธ์เท่ากับ 300
                สุดท้ายผลลัพธ์บรรทัดที่ 4 เป็นการเรียกใช้ฟังก์ชัน setvar3 ซึ่งฟังก์ชันนี้เป็นฟังก์ชันที่ไม่ต้องการรับส่งค่าตัวแปรใด ๆ และมีตัวแปร a = 5 และ b = 10 และสั่งให้แสดงผลการคูณของตัวแปรทั้งสองจึงได้ผลลัพธ์เท่ากับ 50

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Set MongoDB in the windows path environment

  Let’s set MongoDB in the windows environment in just a few steps. Step 1: First download a suitable MongoDB version according to your mach...