Generators ใน Python คืออะไรและจะใช้งานอย่างไร?



เรียนรู้ว่าเครื่องกำเนิดไฟฟ้าใน Python คืออะไรพร้อมข้อดี เรียนรู้วิธีสร้างและใช้งานพร้อมกับกรณีการใช้งานต่างๆ

การสร้างรายการซ้ำหรือวัตถุที่อนุญาตให้ก้าวข้ามสิ่งเหล่านี้ถือเป็นงานที่หนักใจ แต่ใน การดำเนินงานที่เจ็บปวดนี้จะราบรื่นจริงๆ มาดู Generators ใน Python กันดีกว่า

นี่คือรายการหัวข้อทั้งหมดที่กล่าวถึงในบทความนี้:





มาเริ่มกันเลย :)

Generators ใน Python คืออะไร?

เครื่องกำเนิดไฟฟ้าเป็นฟังก์ชันที่ส่งคืนวัตถุหรือรายการที่ข้ามผ่านได้ ฟังก์ชันเหล่านี้ไม่ได้สร้างรายการทั้งหมดในครั้งเดียว แต่จะผลิตทีละรายการและเมื่อจำเป็นเท่านั้น เมื่อใดก็ตามที่ รวมอยู่ในการทำซ้ำในชุดของรายการฟังก์ชันเครื่องกำเนิดไฟฟ้าจะทำงาน เครื่องกำเนิดไฟฟ้ามีข้อดีหลายประการเช่นกัน



ข้อดีของการใช้เครื่องกำเนิดไฟฟ้า

  • หากไม่มีเครื่องกำเนิดไฟฟ้าใน Python การสร้างซ้ำนั้นยากและยาวมาก

  • เครื่องกำเนิดไฟฟ้าใช้งานง่ายเนื่องจากใช้ __iter __ (), __next __ () และ StopIteration โดยอัตโนมัติซึ่งจำเป็นต้องระบุไว้อย่างชัดเจน



  • หน่วยความจำจะถูกบันทึกเมื่อมีการผลิตรายการตามที่ต้องการซึ่งแตกต่างจากปกติ . ข้อเท็จจริงนี้มีความสำคัญมากเมื่อคุณต้องสร้างตัวทำซ้ำจำนวนมาก นี่ถือเป็นข้อได้เปรียบที่ใหญ่ที่สุดของเครื่องกำเนิดไฟฟ้า

  • สามารถใช้ในการผลิตสินค้าจำนวนไม่ จำกัด

  • นอกจากนี้ยังสามารถใช้เพื่อไปป์ไลน์การดำเนินการต่างๆ

ฟังก์ชั่นปกติเทียบกับฟังก์ชันเครื่องกำเนิดไฟฟ้า:

Generators ใน Python ถูกสร้างขึ้นเช่นเดียวกับที่คุณสร้าง โดยใช้คำหลัก 'def' แต่ฟังก์ชัน Generator จะใช้คีย์เวิร์ดที่ให้ผลตอบแทนแทนผลตอบแทน สิ่งนี้ทำเพื่อแจ้งให้ล่ามทราบว่านี่คือตัวทำซ้ำ ไม่เพียงแค่นี้ฟังก์ชัน Generator จะทำงานเมื่อมีการเรียกใช้ฟังก์ชัน next () ไม่ใช่ตามชื่อในกรณีของฟังก์ชันปกติ ลองพิจารณาตัวอย่างต่อไปนี้เพื่อทำความเข้าใจให้ดีขึ้น:

ตัวอย่าง:

def func (a): ให้ a = [1,2,3] b = func (a) ถัดไป (b)

เอาท์พุท: [1, 2, 3]

ดังที่คุณเห็นในผลลัพธ์ด้านบน func () กำลังใช้คำสำคัญที่ให้ผลตอบแทนและฟังก์ชันถัดไปสำหรับการดำเนินการ แต่สำหรับฟังก์ชันปกติคุณจะต้องมีโค้ดต่อไปนี้:

ตัวอย่าง:

def func (a): ส่งคืน a = [1,2,3] func (a)

เอาท์พุท: [1, 2, 3]

หากคุณดูตัวอย่างข้างต้นคุณอาจสงสัยว่าทำไมต้องใช้ฟังก์ชัน Generator ในเมื่อฟังก์ชันปกติส่งคืนเอาต์พุตเดียวกัน มาดูวิธีใช้ Generators ใน Python กัน

การใช้ฟังก์ชัน Generator:

ดังที่ได้กล่าวไว้ก่อนหน้านี้ Generators ใน Python สร้างซ้ำทีละรายการ ดูตัวอย่างต่อไปนี้:

ตัวอย่าง:

def myfunc (a): ในขณะที่ a> = 3: ให้ a = a + 1 b = myfunc (a) print (b) next (b)

เมื่อคุณเรียกใช้ฟังก์ชันต่อไปนี้คุณจะเห็นผลลัพธ์ต่อไปนี้:

เอาท์พุท: 4

ที่นี่มีการส่งคืนอ็อบเจ็กต์ที่ทำซ้ำได้หนึ่งรายการซึ่งเป็นไปตามเงื่อนไข while หลังจากดำเนินการตัวควบคุมจะถูกโอนไปยังผู้เรียก ในกรณีที่ต้องการไอเท็มมากขึ้นจำเป็นต้องเรียกใช้ฟังก์ชันเดียวกันอีกครั้งโดยเรียกใช้ฟังก์ชัน next ()

ถัดไป (b)

เอาท์พุท: 5

ในการดำเนินการเพิ่มเติมฟังก์ชันจะส่งคืน 6,7 เป็นต้นฟังก์ชัน Generator ใน Python ใช้เมธอด __iter __ () และ __next __ () โดยอัตโนมัติ ดังนั้นคุณสามารถทำซ้ำบนวัตถุได้โดยใช้เมธอด next () เมื่อการสร้างไอเท็มควรยุติลงฟังก์ชัน Generator จะใช้ StopIteration ภายในโดยไม่ต้องกังวลกับผู้โทร นี่คืออีกตัวอย่างหนึ่งของสิ่งนี้:

ตัวอย่าง:

a = 2 def myfunc (a): ในขณะที่ a> = 0: ให้ a - = 1 b = myfunc (a) พิมพ์ (b) ถัดไป (b)

เอาท์พุท:

StopIteration-Generators ใน Python-Edurekaภาพด้านบนแสดงการทำงานของโปรแกรมของเราที่ต้องการจำนวนครั้ง หากคุณพยายามเรียกใช้ฟังก์ชันถัดไปอีกครั้งฟังก์ชันจะส่งกลับข้อความที่แสดง StopIteration ได้รับการดำเนินการ หากคุณพยายามทำสิ่งนี้กับฟังก์ชันปกติค่าที่ส่งกลับจะไม่เปลี่ยนแปลงหรือทำซ้ำ ดูตัวอย่างด้านล่าง:

ตัวอย่าง:

def z (): n = 1 ผลผลิต n n = n + 3 ผลผลิต n p = z () ถัดไป (p)

เอาท์พุท:

เครื่องกำเนิดไฟฟ้าพร้อมลูป:

ในกรณีที่คุณต้องการเรียกใช้ฟังก์ชันเดียวกันพร้อมกันคุณสามารถใช้ประโยชน์จากลูป 'for' ได้ ลูปนี้ช่วยวนซ้ำบนออบเจ็กต์และหลังจากการใช้งานทั้งหมดมันจะรัน StopIteration

ตัวอย่าง:

def z (): n = 1 ผลผลิต n n = n + 3 ให้ผล n สำหรับ x ใน z (): พิมพ์ (x)

เอาท์พุท:

หนึ่ง
4

คุณยังสามารถระบุนิพจน์เพื่อสร้างอ็อบเจ็กต์ที่ทำซ้ำได้

นิพจน์เครื่องกำเนิดไฟฟ้า:

คุณยังสามารถใช้นิพจน์ร่วมกับ for loop เพื่อสร้างตัวทำซ้ำ ซึ่งมักจะทำให้การสร้างซ้ำง่ายมาก นิพจน์ตัวสร้างคล้ายกับความเข้าใจรายการและชอบ ฟังก์ชันแลมบ์ดา นิพจน์ตัวสร้างสร้างฟังก์ชันตัวสร้างที่ไม่ระบุชื่อ

ดูตัวอย่างด้านล่าง:

ตัวอย่าง:

a = range (6) print ('List Comprehensive', end = ':') b = [x + 2 for x in a] print (b) print ('Generator expression', end = ': n') c = (x + 2 สำหรับ x ใน a) พิมพ์ (c) สำหรับ y ใน c: พิมพ์ (y)

เอาท์พุท:

ความเข้าใจในรายการ: [2, 3, 4, 5, 6, 7]

นิพจน์เครื่องกำเนิดไฟฟ้า:

2
3
4
5
6

ดังที่คุณเห็นในผลลัพธ์ด้านบนนิพจน์แรกคือความเข้าใจรายการซึ่งระบุไว้ในวงเล็บ [] ความเข้าใจในรายการจะสร้างรายการที่สมบูรณ์พร้อมกัน ต่อไปคือนิพจน์ตัวสร้างที่ส่งคืนรายการเดียวกัน แต่ทีละรายการ ระบุโดยใช้วงเล็บ ()


เครื่องกำเนิดไฟฟ้าสามารถใช้ฟังก์ชันภายในฟังก์ชันอื่น ๆ ได้เช่นกันตัวอย่างเช่น:

วิธีการเสมือนคืออะไร

ตัวอย่าง:

a = range (6) print ('Generator expression', end = ': n') c = (x + 2 for x in a) print (c) print (min (c))

เอาท์พุท:

นิพจน์เครื่องกำเนิดไฟฟ้า
2

โปรแกรมด้านบนพิมพ์ค่าต่ำสุดเมื่อนิพจน์ด้านบนใช้กับค่าของ a.

ใช้กรณี:

ให้เราใช้ Generators ใน ถึง:

  • สร้าง Fibonacci Series
  • กำลังสร้างตัวเลข

การสร้าง Fibonacci Series:

อนุกรมฟีโบนักชีอย่างที่เราทราบกันดีว่าเป็นอนุกรมของตัวเลขโดยแต่ละหมายเลขเป็นผลรวมของตัวเลขสองตัวที่นำหน้า ตัวเลขสองตัวแรกคือ 0 และ 1 นี่คือโปรแกรมเครื่องกำเนิดไฟฟ้าเพื่อสร้างอนุกรมฟีโบนักชี:

ตัวอย่าง:

def fibo (): ครั้งแรกวินาที = 0,1 ในขณะที่ True: ให้ผลลัพธ์แรกก่อนวินาที = วินาทีแรก + วินาทีสำหรับ x ใน fibo (): ถ้า x> 50: แบ่งพิมพ์ (x, end = '')

เอาท์พุท:

0 1 1 2 3 5 8 13 21 34

ผลลัพธ์ด้านบนแสดงชุด Fibonacci ที่มีค่าน้อยกว่า 50 ตอนนี้เรามาดูวิธีสร้างรายการตัวเลขกัน

การสร้างตัวเลข:

ในกรณีที่คุณต้องการสร้างหมายเลขรายการที่ระบุคุณสามารถทำได้โดยใช้ฟังก์ชันเครื่องกำเนิดไฟฟ้า ดูตัวอย่างต่อไปนี้:

ตัวอย่าง:

a = ช่วง (10) b = (x สำหรับ x ใน a) พิมพ์ (b) สำหรับ y ใน b: พิมพ์ (y)

เอาท์พุท:

0
หนึ่ง
2
3
4
5
6
7
8
9

ตัวอย่าง:

a = ช่วง (2,10,2) b = (x สำหรับ x ใน a) พิมพ์ (b) สำหรับ y ใน b: พิมพ์ (y)

เอาท์พุท:


2
4
6
8

โปรแกรมข้างต้นส่งคืนเลขคู่ตั้งแต่ 2 ถึง 10 สิ่งนี้ทำให้เรามาถึงตอนท้ายของบทความนี้เกี่ยวกับ Generators ใน Python ฉันหวังว่าคุณจะเข้าใจหัวข้อทั้งหมด

ให้แน่ใจว่าคุณฝึกฝนให้มากที่สุดและเปลี่ยนประสบการณ์

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นของบล็อก 'Generators in Python' และเราจะติดต่อกลับโดยเร็วที่สุด

หากต้องการรับความรู้เชิงลึกเกี่ยวกับ Python พร้อมกับแอพพลิเคชั่นต่างๆคุณสามารถลงทะเบียนเพื่อถ่ายทอดสด ด้วยการสนับสนุนตลอด 24 ชั่วโมงทุกวันและการเข้าถึงตลอดชีวิต