eumerate(file) v. file.readlines()

จาก 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 ก็น่าจะได้ดูไวกว่า.

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s