Python Generators 101
Python เป็นภาษาโปรแกรมอเนกประสงค์ที่ให้การเข้ารหัสที่มีประสิทธิภาพและประสิทธิผลพร้อมคุณสมบัติต่างๆ รวมถึง Python Generators ตัวสร้างใน Python เป็นฟังก์ชันที่สร้างลำดับของผลลัพธ์แทนที่จะเป็นค่าเดียว ลำดับของค่านี้สร้างขึ้นอย่างเกียจคร้าน
ซึ่งหมายความว่าค่าถัดไปจะถูกสร้างขึ้นเมื่อจำเป็นเท่านั้น และค่าก่อนหน้าจะถูกละทิ้ง ทำให้หน่วยความจำมีประสิทธิภาพ ในบล็อกนี้ เราจะสำรวจแนวคิดของตัวสร้างโดยละเอียด วิธีการสร้าง และวิธีใช้งานในโปรแกรม Python
Python Generators คืออะไร?
ตัวสร้าง Python สามารถวนซ้ำได้ ซึ่งหมายความว่าสามารถใช้เป็นลูปได้ ตัวสร้างถูกสร้างขึ้นโดยใช้ฟังก์ชันที่มีคำสั่ง return แทนคำสั่ง return เมื่อเราเรียกใช้ฟังก์ชันตัวสร้าง มันจะส่งคืนออบเจกต์ตัววนซ้ำ ซึ่งสามารถใช้วนซ้ำในลำดับของค่าที่สร้างโดยตัวสร้าง ใบแจ้งยอดสร้างค่าลำดับแต่ละค่า และฟังก์ชันตัวสร้างจะหยุดชั่วคราวจนกว่าจะมีการร้องขอค่าถัดไป
การสร้าง Generator ใน Python
การสร้างตัวสร้างใน Python นั้นง่ายมาก สิ่งที่คุณต้องทำคือกำหนดฟังก์ชันที่มีyield
คำสั่ง มาสร้างตัวสร้างอย่างง่ายที่สร้างลำดับของตัวเลขกัน
def number_sequence(n):
i = 0
while i < n:
yield i
i += 1
for i in number_sequence(5):
print(i)
0 1 2 3 4
การทำงานของ Generator ใน Python
เมื่อฟังก์ชันตัวสร้างถูกเรียกใช้ มันจะส่งคืนอ็อบเจกต์ตัววนซ้ำ ซึ่งสามารถใช้วนซ้ำตามลำดับของค่าที่สร้างโดยตัวสร้าง คำyield
สั่งใช้เพื่อสร้างแต่ละค่าของลำดับ และฟังก์ชันตัวสร้างจะหยุดชั่วคราวจนกว่าจะมีการร้องขอค่าถัดไป ลองดูวิธีการทำงาน
def number_sequence(n):
i = 0
while i < n:
yield i
i += 1
seq = number_sequence(5)
print(next(seq)) # prints 0
print(next(seq)) # prints 1
print(next(seq)) # prints 2
print(next(seq)) # prints 3
print(next(seq)) # prints 4
Output:
0
1
2
3
4
ตัวอย่างของ Python Generators
ตอนนี้เราเข้าใจแล้วว่าตัวสร้างคืออะไรและข้อดีของมัน เรามาดูตัวอย่างตัวสร้าง Python กัน
- ตัวสร้างลำดับฟีโบนัชชี:
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
def file_reader(filename):
with open(filename, 'r') as file:
for line in file:
yield line
3. เครื่องกำเนิดเคาน์เตอร์:
def counter(start=0, step=1):
n = start
while True:
yield n
n += step
ข้อดีของการใช้ Python Generators
ข้อดีของการใช้ Python Generators มีข้อดีหลายประการเหนือวิธีอื่นๆ ในการสร้างลำดับของค่า
- หน่วยความจำที่มีประสิทธิภาพ:เครื่องกำเนิดเป็นหน่วยความจำที่มีประสิทธิภาพเนื่องจากสร้างค่าได้ทันทีแทนที่จะสร้างและเก็บไว้ในหน่วยความจำ
- การคำนวณที่มีประสิทธิภาพ:เครื่องกำเนิดยังมีประสิทธิภาพในการคำนวณเนื่องจากสร้างเฉพาะค่าที่จำเป็นเท่านั้น สิ่งนี้ทำให้รวดเร็วและมีประสิทธิภาพมากกว่าวิธีอื่นในการสร้างลำดับ
- ลำดับที่ไม่มีที่สิ้นสุด:ตัวสร้างยังสามารถสร้างลำดับของค่าที่ไม่สิ้นสุด ซึ่งเป็นไปไม่ได้ด้วยวิธีการอื่นในการสร้างลำดับ
- การประเมินแบบขี้เกียจ:ตัวสร้างใช้การประเมินแบบขี้เกียจ ซึ่งหมายความว่าพวกเขาจะประเมินนิพจน์เมื่อจำเป็นเท่านั้น ทำให้สามารถใช้ทรัพยากรได้อย่างมีประสิทธิภาพ
- ความสามารถในการเชื่อมโยงตัวทำซ้ำ:ตัวกำเนิดสามารถเชื่อมโยงเข้าด้วยกันเพื่อสร้างลำดับที่ซับซ้อนของค่า ทำให้มีความยืดหยุ่นในการสร้างลำดับ
- Stateful:ตัวสร้างช่วยรักษาสถานะระหว่างการโทร ทำให้สามารถสร้างลำดับที่ซับซ้อนโดยใช้ความพยายามเพียงเล็กน้อย
- ลดรหัส Boilerplate : เครื่องกำเนิดไฟฟ้าสามารถลดรหัสสำเร็จรูปที่จำเป็นสำหรับการสร้างค่าลำดับ ทำให้อ่านและบำรุงรักษาโค้ดได้ง่ายขึ้น
ตัวสร้าง Python เป็นเครื่องมืออันทรงพลังที่สามารถสร้างลำดับของค่าได้อย่างมีประสิทธิภาพและเฉื่อยชา เครื่องกำเนิดไฟฟ้ามีหน่วยความจำที่มีประสิทธิภาพ มีประสิทธิภาพในการคำนวณ และใช้งานง่าย พวกเขาสามารถสร้างลำดับข้อตกลงที่ไม่สิ้นสุดและเชื่อมโยงเข้าด้วยกันเพื่อสร้างข้อตกลงที่ซับซ้อน ตัวสร้างเป็นส่วนสำคัญของภาษา Python และถูกใช้อย่างแพร่หลายในไลบรารีและเฟรมเวิร์กของ Python จำนวนมาก การใช้ตัวสร้างในโค้ดของคุณจะทำให้โค้ดของคุณอ่านง่ายขึ้นและบำรุงรักษาได้มากขึ้น ซึ่งถือว่าเป็น Pythonic