ตั้งแต่ Python 3.0 (PEP 3113) ไม่รองรับการ unpack tuple โดยตรงในพารามิเตอร์ฟังก์ชันอีกต่อไป
โค้ดที่ทำงานใน Python 2 แต่ล้มเหลวใน Python 3
# Python 2 เท่านั้น - SyntaxError ใน Python 3
def fn(a, (b, c)):
pass
Python interpreter จะแสดง Syntax Error ที่วงเล็บเปิดของ tuple
วิธีแก้ใน Python 3: รับ Tuple แล้ว Unpack ภายในฟังก์ชัน
def hypot(p1, p2):
x1, y1 = p1
x2, y2 = p2
import math
hyp = math.sqrt((x1 - x2)**2 + (y1 - y2)**2)
return hyp
x = (10, 10)
y = (20, 20)
print("hyp =", hypot(x, y)) # hyp = 14.142135623730951
เหตุผลของการเปลี่ยนแปลง
- ลดความซับซ้อนของไวยากรณ์
- เพิ่มความสอดคล้อง (parameters เสมอเป็นตัวแปรเดี่ยว)
- ช่วยให้การ introspection และ decorators ทำงานง่ายขึ้น
แนวทางปฏิบัติที่ดี: ส่ง tuple/object เข้ามา แล้ว unpack ภายในฟังก์ชัน ให้ชัดเจนและอ่านง่ายกว่า