จากวิชาสอนเขียนโปรแกรมของเด็กม.1 เรื่องการเปลี่ยนค่าตัวแปรในโปรแกรม มีประเด็นน่าสนใจดีนะครับ
ในหลายภาษาเขียนโปรแกรม การเปลี่ยนค่าตัวแปร รวมทั้งการส่งค่าอากิวเมนต์ไปให้พารามิเตอร์ของฟังก์ชั่น (เวลาเรียกฟังก์ชั่น) จะมี 2 คอนเซปต์ได้แก่
1) ก็อปปี้ค่า (value) จากตัวแปรหนึ่งไปให้อีกตัวแปรโดยตรง
2) ก็อปปี้ค่า reference (หรือ pointer) จากตัวแปรหนึ่ง ไปให้อีกตัวแปรโดยตรง ...ส่งผลทำให้ตัวแปรทั้งสองชี้ไปยังข้อมูลก้อนเดียวกัน (อ็อบเจ็กต์)
(ถ้าเป็นการส่งค่าอากิวเมนต์ไปให้พารามิเตอร์ของฟังก์ชั่น ก็จะเรียกว่า pass by value กับ pass by reference ตามลำดับนั่นเอง)
คราวนี้ถ้าไปดูในตำราม.1 บทที่ 3 สอน Python ภาษานี้จะมองทุกอย่างเป็นอ็อบเจ็กต์หมด เช่น ตัวเลข ก็มองเป็นอ็อบเจกต์ เมื่อตัวแปรเก็บค่าตัวเลข ตัวแปรนั้นก็จะชี้ไปยังอ็อบเจ็กต์ตัวเลข เป็นต้น
**** ใน Python จึงไม่มีการเปลี่ยนแปลงค่าตัวแปร โดยการก็อปปี้ value แต่จะเป็นก็อบปี้ object reference (เติมคำว่า object นำหน้า)
การเปลี่ยนแปลงค่าตัวแปรทุกๆ อย่างใน Python จะเป็นการก็อปปี้ค่า object reference ไปให้ รวมทั้งตอนส่งค่าอากิวเมนต์ไปให้พารามิเตอร์ของฟังก์ชั่น (เวลาเรียกฟังก์ชั่น) ก็จะเป็นการก็อปปี้ค่า object reference ไปให้เช่นกัน
ซึ่ง Python เขาจะเรียกการส่งค่าอากิวเมนต์ไปให้ฟังก์ชั่นว่าเป็น "Call by Object Reference" มากกว่า ไม่ว่าจะส่งข้อมูลเป็นชนิดอะไรก็ตาม ถือเป็นอ็อบเจ็กต์หมด (ไม่ได้มีคอนเซปต์ pass by value กับ pass by reference แบบภาษาอื่น)
เพื่อให้เห็นภาพลองดูบทเรียนของเด็กม .1 ในบทที่ 3 กันดีกว่า (ตามที่เห็นในรูป)
##################
>>> c = 16 # บรรทัด 1
>>> print(c) # บรรทัด 2
16
>>> d = c # บรรทัด 4
>>> print(d) # บรรทัด 5
16
>>> d= 15 # บรรทัด 7
>>> print(d) # บรรทัด 8
15
###################
😁 จะขออธิบายคำสั่งข้างบนกัน
👉 บรรทัด 1-2:
c=16 คำสั่งนี้จะสร้างตัวแปร c แล้วกำหนดให้ชี้ไปยังจำนวนเต็ม 16 จากนั้นแสดงผลด้วยคำสั่ง print(c) ได้ตัวเลข 16 ออกมา
👉 บรรทัด 4-5:
d=c คำสั่งนี้จะสร้างตัวแปร d แล้วชี้ไปที่ตัวแปร c จึงทำให้ตัวแปร d ชี้ไปยังจำนวนเต็ม 16 จากนั้นแสดงผลด้วยคำสั่ง print(d) ได้ตัวเลข 16 ออกมา
**** ถึงตอนนี้ ตัวแปร c กับ d ชี้ไปยังเลข 16 ก้อนเดียวกัน (ใครที่เคยศึกษาภาษาอื่นมา อาจแปลกใจนิดหนึ่ง)
👉 บรรทัด 7-8:
d=15 คำสั่งนี้จะกำหนดให้ตัวแปร d ชี้ไปยังจำนวนเต็ม 15 เมื่อแสดงด้วยคำสั่ง print(d) จะแสดง 15 ออกมา
ตอนนี้ตัวแปร c กับ d ชี้ไปยังข้อมูลคนละก้อนกันแล้ว
----
ถ้าดูภาพประกอบจากหนังสือเรียนม.1 อธิบายชัดเจนดี
แต่ทว่าในตำราไม่ได้พูดเรื่องก็อปปี้ค่าด้วย value หรือ reference อะไรพวกนี้หรอกนะครับ แต่น้องๆ ก็รู้ไว้ใช่ว่าใส่บ่าแบกหาม
เพราะถ้าน้องๆ ไปเขียนภาษาอื่น เช่น java , c, c++ จะมีคอนเซปต์ดังกล่าว จะแตกต่างจาก python ในตำราเรียนนะครับ
อย่างในตำราเรียนเขียนว่า
"ค่าที่เก็บในตัวแปร" อาจพูดว่า "ค่าที่ตัวแปรชี้อยู่" เช่น
>>> a = 100
100 คือค่าที่เก็บในตัวแปร หรือพูดอีกอย่างว่า 100 คือค่าที่ตัวแปรชี้อยู่
(ความหมายเดียวกัน)
+++ข้อมูล++++
หนังสือ "วิทยาการคำนวณ" ชั้น ม .1 บทที่ 3
同時也有1部Youtube影片,追蹤數超過12萬的網紅prasertcbs,也在其Youtube影片中提到,เข้าใจความแตกต่างระหว่างการผ่านตัวแปรไปยังพารามิเตอร์ของฟังก์ชันแบบ pass by value และ pass by reference pass by value จะเป็นการผ่านค่าไปยังพารามิเตอร์...
「python pass by value」的推薦目錄:
- 關於python pass by value 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的精選貼文
- 關於python pass by value 在 prasertcbs Youtube 的最佳貼文
- 關於python pass by value 在 How do I pass a variable by reference? - Stack Overflow 的評價
- 關於python pass by value 在 Python 24: Passing by Value and by Reference - YouTube 的評價
- 關於python pass by value 在 Creating Functions – Programming with Python 的評價
python pass by value 在 prasertcbs Youtube 的最佳貼文
เข้าใจความแตกต่างระหว่างการผ่านตัวแปรไปยังพารามิเตอร์ของฟังก์ชันแบบ pass by value และ pass by reference
pass by value จะเป็นการผ่านค่าไปยังพารามิเตอร์โดยที่ค่านั้นจะถูก copy ไปให้กับตัวแปรอีกตัวหนึ่งในฟังก์ชัน ซึ่งจะถูกเก็บในหน่วยความจำคนละที่กัน ซึ่งการผ่านแบบนี้จะเหมาะสำหรับการผ่านพารามิเตอร์ที่ไม่จำเป็นต้องมีการเปลี่ยนแปลงค่าภายในฟังก์ชัน เช่น ในฟังก์ชันหารากที่สองของตัวเลข เราจะทำการผ่านค่าตัวเลขที่ต้องการหารากที่สองไปให้กับฟังก์ชัน แล้วตัวฟังก์ชันจะนำค่านั้นไปหารากที่สองแล้วส่งค่ากลับมาทางฟังก์ชัน เป็นต้น
ส่วน pass by reference จะเป็นการผ่านค่าให้แก่พารามิเตอร์ของฟังก์ชัน โดย ตัวพารามิเตอร์ในฟังก์ชันจะอิงกับค่าในหน่วยความจำที่เก็บค่าข้อมูลตำแหน่งเดียวกับตัวแปรที่ส่งไปยังฟังก์ชัน ดังนั้นหากภายในฟังก์ชันมีการเปลี่ยนแปลงค่าของพารามิเตอร์ ก็จะส่งผลให้ค่าที่อยู่ในหน่วยความจำนั้นเปลี่ยนแปลงค่าไปด้วยเมื่อสิ้นสุดการใช้งานฟังก์ชัน ตัวอย่างของการ pass by reference ได้แก่ การสลับค่าตัวแปรสองตัว (swap values) เป็นต้น
ดาวน์โหลดไฟล์ตัวอย่างได้ที่ ► https://goo.gl/5LskJ4
เชิญสมัครเป็นสมาชิกของช่องนี้ได้ที่ ► https://www.youtube.com/subscription_center?add_user=prasertcbs
playlist สอนภาษา C++ ► https://www.youtube.com/playlist?list=PLoTScYm9O0GEfZwqM2KyCBcPTVsc6cU_i
playlist สอนภาษา C เบื้องต้น ► https://www.youtube.com/playlist?list=PLoTScYm9O0GHHgz0S1tSyIl7vkG0y105z
playlist สอนภาษา C# ► https://www.youtube.com/playlist?list=PLoTScYm9O0GE4trr-XPozJRwaY7V9hx8K
playlist สอนภาษา Java ► https://www.youtube.com/playlist?list=PLoTScYm9O0GF26yW0zVc2rzjkygafsILN
playlist สอนภาษา Python ► https://www.youtube.com/playlist?list=PLoTScYm9O0GH4YQs9t4tf2RIYolHt_YwW
playlist สอนภาษาไพธอน Python OOP ► https://www.youtube.com/playlist?list=PLoTScYm9O0GEIZzlTKPUiOqkewkWmwadW
playlist สอน Python 3 GUI ► https://www.youtube.com/playlist?list=PLoTScYm9O0GFB1Y3cCmb9aPD5xRB1T11y
playlist สอนภาษา PHP เบื้องต้น ► https://www.youtube.com/playlist?list=PLoTScYm9O0GH_6LARFxozL_viEsXV2wgO
playlist สอนภาษา R เบื้องต้น ► https://www.youtube.com/playlist?list=PLoTScYm9O0GF6qjrRuZFSHdnBXD2KVICp
python pass by value 在 Python 24: Passing by Value and by Reference - YouTube 的推薦與評價
Get the free Python Quickstart eBook at: http://www.brainstemschool.comTo all the haters, yes, I know that it's ... ... <看更多>
python pass by value 在 Creating Functions – Programming with Python 的推薦與評價
The body concludes with a return keyword followed by the return value. When we call the function, the values we pass to it are assigned to those variables so ... ... <看更多>
python pass by value 在 How do I pass a variable by reference? - Stack Overflow 的推薦與評價
... <看更多>
相關內容