หรือแม้กระทั่งทำบางอย่าง
แต่เราจะเห็นว่า ค่าของตัวแปรดั้งเดิมนั้น ไม่เปลี่ยนแปลง (เพราะเป็นการส่ง by value ไม่ใช่ by reference) ถ้าต้องการอ้างตัวแปรนั้นๆ มาใช้ในฟังก์ชัน ต้องประกาศ
global
ครับยกเว้นก็แต่พวก list, object นะครับ ที่ใช้การส่ง by reference เป็นปรกติอยู่แล้ว
นอกจากนี้แล้ว ยังมี
nonlocal
อีกด้วยและด้วย scope ที่ต่างจากภาษาอื่นแบบนี้เอง ทำให้เราสามาถทำท่าแปลกๆ เช่นนี้ได้
มีคำถาม:
ReplyDelete1. nonlocal คือไม่ใช่ global และไม่ใช่ local แล้วถ้าใช้ nolocal ที่เลเวลแรก (ก่อน a = 42) มันจะหมายถึง ตัวแปร global ไหม?
2. ถ้าซ้อนฟังชั่นไปเรื่อย ๆ nonlocal จะหมายถึงตัวแปรอันไหน? เช่นเลเวล 4 จะหมายถึง ตัวแปรที่ เลเวล 3 หรือ 1?
3. ทำไมต้องมี end='' ในคำสั่ง print() ด้วย?
แต่เอ๊ะ เขาสอน geek ไม่ใช่มือใหม่นี่นา XD
1. nonlocal คือ ในกรณีที่หา local ไม่เจอ มันจะหาใน scope ที่ใหญ่ขึ้นครับ (แต่ส่วนใหญ่จะประกาศ nonlocal ไว้บนสุดอยู่แล้ว)
ReplyDelete2. มันจะจะค่อยๆ หาจาก scope ที่ใหญ่ขึ้นเรื่อยๆ ครับ (เช่น ซ้อน 4 ชั้น ก็หาจากชั้นที่ 3 ก่อน ถ้าไม่เจอก็ชั้น 2 แล้วก็ 1) แต่จะไม่ทะลุไปถึง global ครับ
3. อันนี้ผมตั้งใจไม่อธิบายบางอย่าง เพื่อให้เกิดความสงสัย และลองแก้ code ดูเพื่อความเข้าใจด้วยตัวเองครับ XD