กล่าวโดยย่อ เมื่อใดก็ตามที่การควบคุมไปถึงคำสั่ง return ในโปรแกรมของคุณ การดำเนินการของโปรแกรมจะสิ้นสุดลงและคำสั่งที่เหลือจะไม่ถูกดำเนินการ
อย่างไรก็ตาม ในกรณีของผลตอบแทน เมื่อใดก็ตามที่การควบคุมไปถึงคำสั่งผลตอบแทนในโปรแกรมของคุณ การทำงานของโปรแกรมของคุณจะหยุดชั่วคราว และหลังจากนั้น เราสามารถดำเนินการคำสั่งอื่น ๆ ในการทำงานต่อไปได้
มาทำความเข้าใจข้อความทั้งสองอย่างละเอียดกัน
ผลผลิต
การใช้คำสั่งผลตอบแทนในฟังก์ชันทำให้ฟังก์ชันเป็นฟังก์ชันตัวสร้างซึ่งสามารถใช้ในลูปได้ เมื่อฟังก์ชันทำงานและคำสั่งผลตอบแทนทำงาน ค่าหลังจากผลตอบแทนจะถูกส่งกลับไปยังลูปที่เรียกใช้ ครั้งถัดไปที่ลูปวนซ้ำ ฟังก์ชันจะเริ่มทันทีหลังจากคำสั่งผลตอบแทน
def func(): yield 1 yield 2 yield 3 for num in func(): print(num * num)
ผลลัพธ์
1 4 9
ในโปรแกรมด้านบน การวนซ้ำที่เรียกใช้ฟังก์ชันจะเสร็จสมบูรณ์เมื่อฟังก์ชัน func เสร็จสิ้น – ตรงกับจุดสิ้นสุดของฟังก์ชัน (func()) หรือคำสั่ง return
อย่างไรก็ตาม การวนซ้ำใหม่ใดๆ ที่ใช้ฟังก์ชันตัวสร้างเดียวกันจะเรียกใช้ฟังก์ชันตั้งแต่เริ่มต้นอีกครั้ง
คืนสินค้า
คำสั่งส่งคืน
-
ใช้เพื่อหยุดการทำงานของฟังก์ชันและคืนค่าทางเลือกให้กับผู้โทร ฟังก์ชันที่มีผลตอบแทน (แต่ไม่ใช่ผลตอบแทน) ไม่สามารถใช้ในลูปได้ (ต่างจากผลตอบแทนด้านบน)
-
หากมีการเรียกฟังก์ชันที่เคยดำเนินการก่อนหน้านี้อีกครั้ง ฟังก์ชันจะเริ่มดำเนินการตั้งแต่เริ่มต้น (ไม่เหมือนกับผลตอบแทนด้านบน)
ควรใช้ผลตอบแทนหรือผลตอบแทนเมื่อใด
ขอแนะนำให้ใช้ผลตอบแทนเมื่อเราต้องการทำซ้ำในลำดับ เนื่องจากข้อจำกัดของทรัพยากรหรือเพียงแค่ไม่ต้องการเก็บลำดับทั้งหมดในหน่วยความจำ สำหรับกรณีอื่นๆ เราสามารถนึกถึงการใช้คำสั่ง return ได้
ลองดูโปรแกรมอื่นโดยใช้คำสั่งผลตอบแทนเพื่อสร้างกำลังสองของจำนวนเต็ม
def Square(): i = 1; # An Infinite loop to generate squares while True: yield i*i i += 1 # Next execution resumes from this point for num in Square(): if num > 100: break print(num)
ผลลัพธ์
1 4 9 16 25 36 49 64 81 100
โดยทั่วไป คำสั่งผลตอบแทนจะไม่ถูกใช้ในคำสั่ง try ของ try …. ในที่สุดก็บล็อกเพราะไม่มีการรับประกันว่าเครื่องกำเนิดไฟฟ้าจะกลับมาทำงานต่อ ดังนั้นจึงไม่รับประกันว่าบล็อกสุดท้ายจะถูกดำเนินการ