การวนซ้ำผ่าน iterable (2)
สิ่งหนึ่งที่เรียนรู้ไปในบทนี้คือ ไม่ใช่ทุก iterable จะเป็น ลิสต์ จริงๆ ตัวอย่างที่เราได้ดูกันไปแล้วคือ string และการใช้ฟังก์ชัน range() ในแบบฝึกหัดนี้เราจะเน้นที่ฟังก์ชัน range() เป็นหลัก
สามารถใช้ range() ใน for loop ราวกับ ว่ามันคือลิสต์ที่จะวนซ้ำ:
for i in range(5):
print(i)
จำไว้ว่า range() ไม่ได้สร้างลิสต์จริงๆ แต่จะสร้าง range object พร้อม iterator ที่ผลิตค่าออกมาทีละค่าจนถึงขีดจำกัดที่กำหนด (ในตัวอย่างนี้คือจนถึงค่า 4) หาก range() สร้างลิสต์จริงขึ้นมา การเรียกใช้ด้วยค่า \(10^{100}\) อาจทำงานไม่ได้ เพราะตัวเลขขนาดนั้นอาจเกินความจำของคอมพิวเตอร์ทั่วไป ค่า \(10^{100}\) นี้มีชื่อเรียกว่า Googol ซึ่งคือเลข 1 ตามด้วยศูนย์อีกหนึ่งร้อยตัว นับว่าเป็นตัวเลขที่ใหญ่มากทีเดียว!
แบบฝึกหัดนี้จะพิสูจน์ให้เห็นว่าการเรียก range() ด้วย \(10^{100}\) จะไม่สร้างลิสต์ขึ้นมาจริงๆ
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Python Toolbox
คำแนะนำการฝึกหัด
- สร้าง iterator object ชื่อ
small_valueจากrange(3)โดยใช้ฟังก์ชันiter() - ใช้
forloop วนซ้ำผ่านrange(3)แล้วพิมพ์ค่าในแต่ละรอบ โดยใช้numเป็นตัวแปรลูป - สร้าง iterator object ชื่อ
googolจากrange(10 ** 100)
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Create an iterator for range(3): small_value
small_value = ____
# Print the values in small_value
print(next(small_value))
print(next(small_value))
print(next(small_value))
# Loop over range(3) and print the values
# Create an iterator for range(10 ** 100): googol
googol = ____
# Print the first 5 values from googol
print(next(googol))
print(next(googol))
print(next(googol))
print(next(googol))
print(next(googol))