Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

เมื่อใดควรใช้ผลตอบแทนแทนการส่งคืนใน Python


กล่าวโดยย่อ เมื่อใดก็ตามที่การควบคุมไปถึงคำสั่ง 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 …. ในที่สุดก็บล็อกเพราะไม่มีการรับประกันว่าเครื่องกำเนิดไฟฟ้าจะกลับมาทำงานต่อ ดังนั้นจึงไม่รับประกันว่าบล็อกสุดท้ายจะถูกดำเนินการ