จาก plynoi ถามมาว่า enumerate(file) มันดีกว่าใช้ file.readlines() อย่างไร. plynoi ตอบเองว่าได้ index มาด้วย. แต่มันก็น่าจะมีอะไรมากกว่านั้นหน่อยผมเลยลองทำ 2 โปรแกรมนี้.
enum1.py:
import sys filename = sys.argv[1] f = open(filename) print f.readlines()[0] f.close()
enum2.py:
import sys
filename = sys.argv[1]
f = open(filename)
for i, line in enumerate(f):
print i, line
break
f.close()
ทั้ง 2 โปรแกรม print บรรทัดแรกอย่างเดียวนะครับ
veer@veer-laptop:wordalign$ time python enum1.py tha_cut_u8.txt > /dev/null real 0m0.076s user 0m0.044s sys 0m0.032s $ time python enum2.py tha_cut_u8.txt > /dev/null real 0m0.021s user 0m0.012s sys 0m0.008s
enum2.py เร็วกว่ามาก … น่าจะเป็นเพราะว่า enum2.py อ่านทีละบรรทัดแล้วก็มาทำอะไรต่ออะไรใน for-loop เลย. แต่ enum1.py อ่านทุกอย่างมาเก็บใน list แล้วค่อย มาทำอะไรใน list อีกที … ถ้าเป็นแบบที่เดาจริง มันจะประหยัด memory กว่าถ้าใช้ enumerate. ประโยชน์อีกอย่างหนึงถ้าทำอะไรแบบ interactive ดูผลทีละบรรทัด ใช้ enumerate ก็น่าจะได้ดูไวกว่า.