เรียน Python: ความเจ๋งของการ Swap ค่าที่ภาษาอื่นหลายภาษายังต้องอิจฉา
หลายคนที่เริ่มเรียน Python หลังจากเคยเขียน C, Java หรือ JavaScript มักจะมีโมเมนต์ "อ้าว ทำแบบนี้ได้ด้วยเหรอ?"
หนึ่งในฟีเจอร์ที่เรียบง่ายแต่ทรงพลังที่สุดคือ การสลับค่า (Swap)
สมัยก่อนต้องเขียนแบบนี้
ในหลายภาษา การสลับค่าระหว่างตัวแปรสองตัวต้องใช้ตัวแปรชั่วคราว
a = 10
b = 20
temp = a
a = b
b = temp
print(a, b)
ผลลัพธ์
20 10
Python ทำได้ในบรรทัดเดียว
a = 10
b = 20
a, b = b, a
print(a, b)
ผลลัพธ์
20 10
ดูเหมือนเวทมนตร์ แต่จริง ๆ แล้ว Python ใช้แนวคิดที่เรียกว่า Tuple Packing / Unpacking
Python จะสร้างค่า
(b, a)
ขึ้นมาก่อน
แล้วค่อยกระจายค่ากลับไปยัง
a, b
ดังนั้นจึงไม่เกิดปัญหาที่ค่าถูกเขียนทับระหว่างทาง
Swap ได้หลายตัวพร้อมกัน
ไม่ใช่แค่ 2 ตัว
a = 1
b = 2
c = 3
a, b, c = c, a, b
print(a, b, c)
ผลลัพธ์
3 1 2
Swap ค่าใน List ได้เลย
หลายภาษาอาจต้องเขียนแบบนี้
temp = numbers[0]
numbers[0] = numbers[1]
numbers[1] = temp
แต่ Python เขียนได้สั้นกว่า
numbers = [10, 20, 30]
numbers[0], numbers[1] = numbers[1], numbers[0]
print(numbers)
ผลลัพธ์
[20, 10, 30]
ใช้ใน Sorting Algorithm ได้สวยมาก
ตัวอย่าง Bubble Sort
numbers = [5, 3, 8, 1]
for i in range(len(numbers)):
for j in range(len(numbers)-1):
if numbers[j] > numbers[j+1]:
numbers[j], numbers[j+1] = \
numbers[j+1], numbers[j]
print(numbers)
แทนที่จะต้องประกาศ
temp
ทุกครั้งที่สลับค่า
Swap Object ก็ได้
user1 = {"name": "Alice"}
user2 = {"name": "Bob"}
user1, user2 = user2, user1
print(user1)
print(user2)
ผลลัพธ์
{'name': 'Bob'}
{'name': 'Alice'}
Python สลับ Reference ให้ทันที
Swap แถวใน Matrix
matrix = [
[1, 2],
[3, 4]
]
matrix[0], matrix[1] = matrix[1], matrix[0]
print(matrix)
ผลลัพธ์
[
[3, 4],
[1, 2]
]
ความลับเบื้องหลัง
หลายคนคิดว่า Python ต้องสร้างตัวแปรลับชื่อ temp
แต่จริง ๆ แล้ว Python ใช้ bytecode สำหรับ unpacking โดยตรง
a, b = b, a
มีประสิทธิภาพมากกว่าที่คิด และเป็นรูปแบบมาตรฐานที่ Python Programmer ใช้กันทั่วโลก
ตัวอย่างที่คนเห็นครั้งแรกมักร้อง "ว้าว"
Rotate 3 ค่า
a, b, c = 1, 2, 3
a, b, c = b, c, a
print(a, b, c)
ผลลัพธ์
2 3 1
Reverse คู่ข้อมูล
left, right = right, left
Swap ค่าใน Dictionary
scores = {
"A": 100,
"B": 90
}
scores["A"], scores["B"] = \
scores["B"], scores["A"]
print(scores)
ผลลัพธ์
{'A': 90, 'B': 100}
ทำไมฟีเจอร์นี้ถึงสำคัญ
การ Swap อาจดูเป็นเรื่องเล็ก แต่เป็นตัวอย่างที่สะท้อนปรัชญาของ Python ได้ดีมาก
"Simple is better than complex."
โค้ดที่เคยต้องเขียน 3-4 บรรทัด เหลือเพียงบรรทัดเดียว อ่านง่าย ลดโอกาสเกิด Bug และทำให้ Programmer โฟกัสกับปัญหาจริง ๆ มากกว่ารายละเอียดจุกจิกของภาษา
และนี่เป็นเพียงหนึ่งในหลาย ๆ ฟีเจอร์ที่ทำให้หลายคนเริ่มเรียน Python แล้วไม่อยากกลับไปเขียนภาษาเดิมอีกเลยครับ
ความคิดเห็น
แสดงความคิดเห็น