想起了一件重要的事情,那就是你不應該爲你的一萬五千行中的每一行重新打開輸出文件。 SWAP與上下文管理的循環,你可能會看到一個加速:
你也可能通過創建(使用join
)整體輸出字符串,然後在一次寫它提高性能。這將減少字符串連接以及文件寫入次數。我的測試表明,這提供了適度的加速,但是如果你的線路太長或者硬件有限,你的結果可能會有所不同。當你特別要求「記憶明智」的效率時,我覺得有必要指出,一次寫入整個字符串會消耗更多的內存,但可能不足以成爲一個問題!
與往常一樣,testing ityourself沒有真正的替代!
bcodeIn = open('bcode.txt', encoding="utf8")
with open('bcode_prepend.txt', 'a', encoding='utf-8') as file:
file.write('a:')
file.write('a:'.join(line for line in bcodeIn))
留給後人,這裏有我的時序結果。 As usual,使用str.join
明顯好於重複連接。
>>> import timeit
>>> s = '''import random
... import io
... data = [str(random.randint(0,100)) for _ in range(1000)]
... out = io.StringIO()'''
>>> plus = '''for n in data:
... out.write('a:'+n)'''
>>> form = '''for n in data:
... out.write('a:{}'.format(n))'''
>>> join = '''out.write('a:'+('a:'.join(n for n in data)))'''
>>> min(timeit.repeat(plus, s, number=10000, repeat=20))
1.5328539289755554
>>> min(timeit.repeat(form, s, number=10000, repeat=20))
3.371942257764431
>>> min(timeit.repeat(join, s, number=10000, repeat=20))
0.5443316215198593
>>>
現在快得多。謝謝。 – user3380034