Python: Return Multiple Values from a Function
คุณสามารถคืนค่าหลายค่าได้โดยการรวมค่าเหล่านั้นในดิกชันนารี (dictionary), ทูเพิล (tuple), หรือลิสต์ (list) ชนิดข้อมูลเหล่านี้ให้คุณจัดเก็บค่าที่คล้ายกันหลายค่า คุณสามารถแยกค่าแต่ละค่าออกมาในโปรแกรมหลัก หรือส่งค่าหลายค่าและคั่นด้วยคอมมา
ฟังก์ชัน Python สามารถคืนค่าหลายค่าได้ เพื่อคืนค่าหลายค่า คุณสามารถคืนดิกชันนารี, ทูเพิล Python, หรือลิสต์ไปยังโปรแกรมหลัก
คู่มือนี้อธิบายวิธีคืนค่าหลายค่าไปยังโปรแกรมหลักด้วยสองวิธี มาเริ่มกัน
Python: Return Multiple Values
คุณสามารถคืนค่าหลายค่าจากฟังก์ชัน Python ได้โดยใช้:
- ลิสต์ที่มีหลายค่า
- ทูเพิลที่มีหลายค่า
- ดิกชันนารีที่มีหลายเรคคอร์ด
- ค่าหลายค่าคั่นด้วยคอมมา
ชนิดข้อมูลทั้งหมดข้างต้นให้จัดเก็บหลายค่า วิธีคืนค่าหลายค่าคั่นด้วยคอมมาเป็นวิธีที่สง่างามที่สุด เนื่องจากวิธีนี้ชี้เจตนาชัดเจน: คืนค่าหลายค่าแยกกันกลับไปยังโปรแกรมหลัก
คำสั่ง return ของ Python ส่งค่าจากฟังก์ชันไปโปรแกรมหลัก คำสั่งนี้มักใช้คืนค่าหนึ่งค่าไปโปรแกรมหลัก แต่สามารถใช้คืนค่าหลายค่าไปโปรแกรมหลักได้
Python: Return Multiple Values ด้วยคอมมา (Commas)
คุณสามารถคืนค่าหลายค่าได้โดยแยกค่าที่ต้องการคืนด้วยคอมมา ค่าเหล่านี้ควรปรากฏหลังคำสั่ง return ของ Python
เราจะเขียนโปรแกรมคำนวณจำนวนการขายที่ร้านอุปกรณ์อิเล็กทรอนิกส์ เราจะนับเฉพาะการขายที่มีค่ามากกว่า $500 โปรแกรมยังคำนวณค่าเฉลี่ยของแต่ละการขาย
เริ่มต้น กำหนดอาร์เรย์ Python ที่มีรายการขาย:
sales = [59.99, 240.00, 655.25, 75.99]
ต่อไป เขียนฟังก์ชัน Python คำนวณจำนวนการขายมากกว่า $500 และค่าเฉลี่ยมูลค่าการซื้อ:
def calculate_data(sales):
over_limit = 0
for s in sales:
if s > 500:
over_limit += 1
average_purchase = sum(sales) / len(sales)
return over_limit, average_purchase
ฟังก์ชันของเราวนผ่านทุกการขายในลิสต์ด้วยลูป for หากการขายมีค่ามากกว่า $500 ตัวแปร over_limit ของ Python เพิ่มขึ้น 1 เราคำนวณค่าเฉลี่ยมูลค่าการซื้อโดยหารมูลค่ารวมของทุกการขายด้วยจำนวนการขาย
ท้ายฟังก์ชัน ใช้คำสั่ง return คืนค่า over_limit และ average_purchase ไปโปรแกรมหลัก
สิ่งที่เหลือคือ เรียกฟังก์ชันและแสดงข้อมูลที่โปรแกรมคำนวณไปที่คอนโซล:
over_limit, average_purchase = calculate_data(sales)
print("{} sales were made over $500. The average purchase was ${}.".format(over_limit, round(average_purchase)))
เราปัดเศษค่าเฉลี่ยการซื้อเป็นทศนิยมสองตำแหน่งด้วยเมธอด round() โค้ดพิมพ์ข้อความแจ้งค่าที่เราคำนวณ มารันโปรแกรม:
1 sales were made over $500. The average purchase was $258.
โปรแกรมของเราบอกสำเร็จว่ามีการขายมากกว่า $500 กี่ครั้ง และราคาเฉลี่ยการซื้อเท่าไหร่
โค้ดนี้ทำงานเพราะคำสั่ง return แปลงค่าของเราเป็นทูเพิล และคืนรายการทูเพิลไปโปรแกรมหลัก เรา unpack ทูเพิลนี้เป็นสองตัวแปรในบรรทัด:
over_limit, average_purchase = calculate_data(sales)
Python: Return Multiple Values ด้วยลิสต์หรือทูเพิล (List or Tuple)
ทั้งลิสต์และทูเพิลให้จัดเก็บหลายค่าได้ หมายถึงเราสามารถใช้พวกมันคืนค่าหลายค่าไปโปรแกรมหลัก
การใช้ลิสต์หรือทูเพิลเหมาะหากค่าที่คุณคืนมีความสัมพันธ์กันบ้าง แต่คุณสามารถใช้วิธีนี้คืนชุดค่าใดๆ ได้
เราจะคืนขนาดการซื้อเฉลี่ย และจำนวนการซื้อมากกว่า $500 ไปโปรแกรมหลัก เพื่อทำเช่นนั้น อ้างอิงตัวอย่างก่อนหน้าและเปลี่ยนเล็กน้อยเพื่อใช้ลิสต์:
def calculate_data(sales):
over_limit = 0
for s in sales:
if s > 500:
over_limit += 1
average_purchase = sum(sales) / len(sales)
return [over_limit, average_purchase]
เราเพียงแยกค่าของเราเป็นลิสต์เดียว ลิสต์ของเรามีจำนวนการซื้อมากกว่า $500 และมูลค่าการซื้อเฉลี่ย ตามลำดับ
เราสามารถคืนโครงสร้างข้อมูลทูเพิลได้ด้วย เพื่อทำเช่นนั้น เราจะแทนที่วงเล็บเหลี่ยมด้วยวงเล็บปีกกา ปัจจัยสำคัญคือ ทูเพิลไม่สามารถมีค่าซ้ำได้ หากมีโอกาสว่าค่าสองค่าที่คุณส่งไปโปรแกรมหลักจะเท่ากัน หลีกเลี่ยงการใช้ทูเพิล
เพื่อเข้าถึงค่าเหล่านี้ในโปรแกรมหลัก เราต้องใช้ดัชนี (indexing):
values = calculate_data(sales)
print("{} sales were made over $500. The average purchase was ${}.".format(values[0], round(values[1])))
เราใช้ไวยากรณ์ values[0] เข้าถึงค่าแรกในลิสต์ที่ฟังก์ชัน calculate_data() คืนค่า สอดคล้องกับค่า over_limit ในฟังก์ชัน เราใช้ values[1] เข้าถึงมูลค่าการซื้อเฉลี่ย
โค้ดคืนค่า:
1 sales were made over $500. The average purchase was $258.
โค้ดทำงานเหมือนตัวอย่างก่อน แต่คราวนี้เราใช้ลิสต์แยกค่าในโค้ด
Python: Return Multiple Values ด้วยดิกชันนารี (Dictionary)
เราสามารถคืนค่าหลายค่าจากฟังก์ชันด้วยดิกชันนารี
ในตัวอย่างก่อน เราคืนแค่สองค่าไปโปรแกรมหลัก ทำให้ syntax การ unpack (การแยกค่าออกเป็นตัวแปรหลายตัว) สะดวก
หากเราทำงานกับค่ามากกว่านี้ อาจง่ายกว่าที่จะคืนดิกชันนารีที่เชื่อมโยงแต่ละค่ากับฉลาก (label) มาปรับปรุงฟังก์ชันล่าสุดให้ใช้ดิกชันนารีคืนค่าหลายค่าไปโปรแกรมหลัก:
def calculate_data(sales):
over_limit = 0
for s in sales:
if s > 500:
over_limit += 1
average_purchase = sum(sales) / len(sales)
return {
"limit": over_limit,
"average": average_purchase
}
ฟังก์ชันคืนดิกชันนารีด้วยสองคีย์และค่า คีย์ "limit" และ "average" ใช้ระบุแต่ละค่าได้อย่างเฉพาะเจาะจง ตอนนี้เราต้องปรับการเรียกฟังก์ชันและคำสั่ง print ให้รองรับไวยากรณ์ใหม่:
values = calculate_data(sales)
print("{} sales were made over $500. The average purchase was ${}.".format(values["limit"], round(values["average"])))
เราคืนดิกชันนารีกลับโปรแกรมหลัก กำหนดดิกชันนารีนี้ให้ตัวแปร values จากนั้นใช้ดัชนีดึงค่า "limit" และ "average"
มารันโปรแกรม:
1 sales were made over $500. The average purchase was $258.
โปรแกรมคืนคำตอบเหมือนก่อนหน้า คาดหมายเพราะเราเพียงเปลี่ยนวิธีคืนค่าไปโปรแกรมหลัก ตรรกะการคำนวณยังคงเดิม
สรุป
คุณสามารถคืนค่าหลายค่าจากฟังก์ชันได้ด้วยดิกชันนารี, ทูเพิล, หรือลิสต์ ชนิดข้อมูลเหล่านี้ทั้งหมดให้จัดเก็บหลายค่า ไม่มีไวยากรณ์เฉพาะสำหรับคืนค่าหลายค่า แต่วิธีเหล่านี้ทำหน้าที่แทนได้ดี
วิธีคั่นด้วยคอมมาสะดวกและเข้าใจง่ายกว่าหากทำงานกับชุดค่าน้อย สมมติคุณคืนช่วงค่ากว้างจากฟังก์ชัน คุณอาจต้องการใช้ดิกชันนารีส่งค่าหลายค่ากลับโปรแกรมหลัก
ต้องการเร่งการเดินทางเรียนภาษา Python? ดูคู่มือ How to Learn Python สำหรับคำแนะนำคอร์ส Python ชั้นนำและแหล่งทรัพยากรออนไลน์