Contents

การทำงานกับเครื่องกำเนิดไฟฟ้าใน Python

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

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

เครื่องกำเนิดไฟฟ้าคืออะไร?

/th/images/wind-energy-generator.jpg

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

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

การสร้างฟังก์ชันการทำงานในภาษาการเขียนโปรแกรมมักเกี่ยวข้องกับการกำหนดวิธีสร้างหรือดำเนินการข้อมูล มีความแตกต่างพื้นฐานระหว่างฟังก์ชันมาตรฐานและฟังก์ชันตัวสร้างโดยคำนึงถึงแนวทางในการให้ผลลัพธ์ โดยทั่วไปแล้ว ฟังก์ชันปกติจะใช้คีย์เวิร์ด"return"เป็นวิธีการส่งออกข้อมูล ในขณะที่ฟังก์ชันตัวสร้างจะใช้คำสั่ง"yield"เพื่อจุดประสงค์นี้

วิธีสร้างเครื่องกำเนิดไฟฟ้า

ในการสร้างฟังก์ชันตัวสร้าง แทนที่จะใช้คำสั่ง return แบบเดิม ให้ใช้คำสั่ง Yield ที่อยู่ภายในเนื้อหาของฟังก์ชัน คำสำคัญ Yield ไม่เพียงแต่ทำหน้าที่เป็นคำสั่งสำหรับฟังก์ชันในการสร้างผลลัพธ์ แต่ยังช่วยให้สามารถรักษาสถานะปัจจุบันได้ จึงช่วยอำนวยความสะดวกในการเริ่มการทำงานใหม่ที่อาจเกิดขึ้น

แน่นอนว่า นี่คือตัวอย่างของฟังก์ชันตัวสร้างพื้นฐานใน Python:

 def numeric_generator():
  yield 1
  yield 2
  yield 3

gen = numeric_generator()

เมื่อดำเนินการฟังก์ชันเฉพาะนี้จะสร้างลำดับตัวเลขตั้งแต่ 1 ถึง 3

คำสั่ง Yield มีจุดประสงค์เฉพาะในการเขียนโปรแกรมเชิงฟังก์ชันโดยทำให้สามารถระงับและเริ่มต้นการทำงานของฟังก์ชันใหม่ได้ ในขณะเดียวกันก็รักษาสถานะปัจจุบันไว้ รวมถึงตัวแปรที่กำหนดในเครื่องใดๆ สำหรับการเรียกใช้ในภายหลัง ซึ่งช่วยให้การคำนวณต่อเนื่องได้อย่างราบรื่นโดยไม่จำเป็นต้องรีสตาร์ทหรือทำบัญชีเพิ่มเติมอย่างชัดเจน

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

/th/images/generator-object.jpg

การทำงานกับเครื่องกำเนิดไฟฟ้า

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

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

 for i in numeric_generator():
  print(i)

เราอาจใช้ฟังก์ชันที่ตามมาเพื่อรับค่าตามลำดับ:

 print(next(gen)) # 1
print(next(gen)) # 2
print(next(gen)) # 3

การให้อิทธิพลแก่คุณมากขึ้นเหนือเอนทิตีตัวสร้างสามารถทำได้ผ่านแนวทางนี้

/th/images/numeric-generator-in-action.jpg

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

เรายังสามารถส่งข้อมูลไปยังเครื่องกำเนิดไฟฟ้าโดยใช้เมธอด send() เพื่อให้สามารถจัดเตรียมค่าได้

 def generator_with_send():
    # First yield: Receive a value
    x = yield
    print(f"Received: {x}")

    # Second yield: Receive another value
    y = yield
    print(f"Received: {y}")

    # Third yield: Yield the sum
    yield x \+ y

gen = generator_with_send()

# Start generator and reach first yield
next(gen)

# Send 10 into generator, received at first yield
result = gen.send(10)

# Send 5 into generator, received at second yield
result = gen.send(5)

# Print result of third yield
print(result) 

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

/th/images/sending-values-to-generators.jpg

การใช้นิพจน์ตัวสร้าง

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

นี่คือตัวอย่าง:

 gen = (i**2 for i in range(10))

for x in gen:
  print(x)

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

/th/images/generator-expressions.jpg

การใช้เครื่องกำเนิดไฟฟ้าสำหรับการประมวลผลข้อมูล

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

เมื่อทำงานกับชุดข้อมูลที่กว้างขวาง ควรพิจารณาใช้เครื่องกำเนิดไฟฟ้าเพื่อความสามารถในการจัดการงานคำนวณที่ยากลำบาก ขณะเดียวกันก็รักษาสภาพแวดล้อมการเขียนโค้ดที่คล่องตัวและคล่องตัว