จากวิชาสอนเขียนโปรแกรมของเด็กม.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
同時也有3部Youtube影片,追蹤數超過12萬的網紅prasertcbs,也在其Youtube影片中提到,สาธิตการเขียนฟังก์ชันเพื่อแยกราคารวมของสินค้าออกเป็นราคาและภาษีมูลค่าเพิ่ม โดยแสดงให้เห็นถึงวิธีการเขียนฟังก์ชันโดยใช้ 1) pass by pointer 2) pass by r...
pass by reference python 在 prasertcbs Youtube 的最佳解答
สาธิตการเขียนฟังก์ชันเพื่อแยกราคารวมของสินค้าออกเป็นราคาและภาษีมูลค่าเพิ่ม โดยแสดงให้เห็นถึงวิธีการเขียนฟังก์ชันโดยใช้
1) pass by pointer
2) pass by reference
3) สร้าง struct โดยมี price และ vat เป็น member แล้วเขียนฟังก์ชันเพื่อให้ส่งค่ากลับมาเป็น struct
ดาวน์โหลดไฟล์ตัวอย่างได้ที่ ► https://goo.gl/qSfHSn
เชิญสมัครเป็นสมาชิกของช่องนี้ได้ที่ ► 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
pass by reference python 在 prasertcbs Youtube 的精選貼文
เนื้อหาแสดงถึงวิธีการประยุกต์ใช้ pass by reference โดยแสดงให้เห็นถึงการประยุกใช้ 3 กรณี อันได้แก่
1. การเขียนฟังก์ชัน swap(a, b) สำหรับสลับค่าของตัวแปร a และ b
2. การผ่าน string แบบ pass by reference เพื่อให้ฟังก์ชันทำการเปลี่ยนค่าสตริงที่ผ่านเข้าไป
3. การผ่าน vector ซึ่งเป็น container ที่เก็บค่าได้หลาย ๆ ค่าคล้าย ๆ กับอะเรย์ ไปให้พารามิเตอร์ของฟังก์ชัน เพื่อให้โค้ดภายในฟังก์ชันทำการเปลี่ยนแปลงค่าสมาชิกแต่ละตัวใน vector
ดาวน์โหลดไฟล์ตัวอย่างได้ที่ ► https://goo.gl/5cfCen
เชิญสมัครเป็นสมาชิกของช่องนี้ได้ที่ ► 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
pass by reference python 在 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
pass by reference python 在 How do I pass a variable by reference? - Stack Overflow 的相關結果
Python : Python is “pass-by-object-reference”, of which it is often said: “Object references are passed by value.”[Read here]1. Both the caller and the function ... ... <看更多>
pass by reference python 在 For full functionality of this site it is necessary to enable ... 的相關結果
For full functionality of this site it is necessary to enable JavaScript. Here are the instructions how to enable JavaScript in your web browser. ... <看更多>
pass by reference python 在 Python 是Pass By Value, Pass by Reference, 還是 ... - Medium 的相關結果
這次使用Python 的角度切入,使用淺顯易懂的語言,並用圖片來說明記憶體中到底Pass by Value, Pass by Reference 與Pass by Sharing 如何運作與會造成什麼現象。 ... <看更多>