ฟังก์ชัน Python สามารถคืนค่าได้หลายค่า ค่าเหล่านี้สามารถเก็บไว้ในตัวแปรได้โดยตรง ฟังก์ชันไม่ได้จำกัดให้ส่งคืนตัวแปร แต่สามารถคืนค่าศูนย์ หนึ่ง สอง หรือมากกว่าได้
นี่เป็นคุณสมบัติเริ่มต้นของ python เพื่อคืนค่าหลายค่า/ตัวแปร ซึ่งไม่มีในภาษาโปรแกรมอื่นๆ เช่น C++ หรือ Java
สำหรับการคืนค่าหลายค่าจากฟังก์ชัน เราสามารถคืนค่าออบเจ็กต์ tuple, list หรือ dictionary ได้ตามความต้องการของเรา
วิธีที่ 1:การใช้ทูเพิล
def func(x): y0 = x+ 1 y1 = x * 3 y2 = y0 ** 3 return (y0, y1, y2)
อย่างไรก็ตาม โปรแกรมข้างต้นมีปัญหาเนื่องจากจำนวนค่าที่ส่งคืนเพิ่มขึ้น ในกรณีที่เราต้องการคืนค่าหกหรือเจ็ดค่า? แน่นอนว่าเราสามารถรวมเข้าด้วยกันได้ แต่มันง่ายที่จะลืมว่าค่าอยู่ที่ไหน นอกจากนี้ยังยุ่งยากเล็กน้อยในการแกะกล่องทุกที่ที่เราต้องการรับ
วิธีที่ 2:การใช้พจนานุกรม
อีกวิธีหนึ่งที่ดีกว่าคือการใช้พจนานุกรม
def func(x): y0 = x+ 1 y1 = x * 3 y2 = y0 ** 3 return {'y0': y0, 'y1': y1, 'y2': y2}
ตอนนี้ เรามีกลไกที่เราสามารถฉายสมาชิกของวัตถุที่ส่งคืนได้
ตัวอย่างเช่น −
result[‘y1’]
วิธีที่ 3:การใช้คลาส
อีกทางเลือกหนึ่งคือการใช้คลาส ซึ่งเราสามารถคืนโครงสร้างพิเศษได้
class ReturnValue(obj): def __init__(self, y0, y1, y2): self.y0 = y0 self.y1 = y1 self.y2 = y2 def g(x): y0 = x + 1 y1 = x * 3 y2 = y0 ** 3 return ReturnValue (y0, y1, y2)
วิธีที่ 4:การใช้รายการ
อีกวิธีหนึ่งคือการใช้รายการ
def func(x): result = [x + 1] result.append(x * 3) result.append(y0 ** 3) return result
วิธีที่ 5:การใช้ตัวสร้าง
เราสามารถเลือกตัวเลือกนี้ในการใช้ผลตอบแทนเพื่อคืนค่าหลายค่าทีละค่า ในกรณีที่เราต้องคืนค่าจำนวนที่ค้างอยู่ การใช้ลำดับอาจใช้ทรัพยากรระบบจำนวนมาก
def func(x): y0 = x + 1 yield y0 yield x * 3 yield y0 ** 3
วิธีใดดีที่สุดในการคืนค่าหลายค่าจากฟังก์ชัน
ทุกอย่างขึ้นอยู่กับรสนิยมหรือความต้องการของคุณ ว่าคุณชอบวิธีไหนมากกว่ากัน คุณสามารถเลือกเส้นทาง – พจนานุกรม เนื่องจากเกี่ยวข้องกับงานการตั้งค่าน้อยกว่า หรือคุณสามารถเลือก – class route เนื่องจากอาจช่วยให้คุณหลีกเลี่ยงความสับสนว่าพจนานุกรมหมายถึงอะไร หรือคุณสามารถเลือกตัวสร้างเพื่อให้ได้ค่าทีละตัว