การสร้างรายการซ้ำหรือวัตถุที่อนุญาตให้ก้าวข้ามสิ่งเหล่านี้ถือเป็นงานที่หนักใจ แต่ใน การดำเนินงานที่เจ็บปวดนี้จะราบรื่นจริงๆ มาดู Generators ใน Python กันดีกว่า
นี่คือรายการหัวข้อทั้งหมดที่กล่าวถึงในบทความนี้:
- Generators คืออะไร?
- ข้อดีของการใช้เครื่องกำเนิดไฟฟ้า
- ฟังก์ชันปกติเทียบกับฟังก์ชันเครื่องกำเนิดไฟฟ้า
- การใช้ฟังก์ชัน Generator
- เครื่องกำเนิดไฟฟ้าที่มีลูป
- นิพจน์เครื่องกำเนิดไฟฟ้า
- ใช้กรณี
มาเริ่มกันเลย :)
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 ได้รับการดำเนินการ หากคุณพยายามทำสิ่งนี้กับฟังก์ชันปกติค่าที่ส่งกลับจะไม่เปลี่ยนแปลงหรือทำซ้ำ ดูตัวอย่างด้านล่าง:
ตัวอย่าง:
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 ชั่วโมงทุกวันและการเข้าถึงตลอดชีวิต