2016-08-28 7 views
1

私はPython 3.5.2を使用しています。私は、ファイルから単語を読み込んでリストにする関数をテストしていました。私は2つのバージョンを作成しました:1つは、appendメソッドともう1つは、連結操作です。その後、私は彼らが取る時間をテストする別の機能を作った。追加速度と連結速度をテストすると一貫性のない結果が発生する

import time 

def build1(path): 
    seq = [] 
    fin = open(path) 
    for line in fin: 
     word = line.strip() 
     seq.append(word) 
    fin.close() 
    return seq 

def build2(path): 
    seq = [] 
    fin = open(path) 
    for line in fin: 
     word = line.strip() 
     seq += [word] 
    fin.close() 
    return seq 

def test(f, p): 
    start = time.time() 
    f(p) 
    stop = time.time() 
    print('Duration: %fs' %(stop - start)) 

path = 'C:/Users/neem/Desktop/words.txt' 
test(build1, path) 
test(build2, path) 

私はそれを数回テストしましたが、ここでは私の出力です。

C:\Users\neem\AppData\Local\Programs\Python\Python35-32>python Programs/Test.py 
Duration: 0.171600s 
Duration: 0.156000s 

C:\Users\neem\AppData\Local\Programs\Python\Python35-32>python Programs/Test.py 
Duration: 0.171600s 
Duration: 0.202800s 

C:\Users\neem\AppData\Local\Programs\Python\Python35-32>python Programs/Test.py 
Duration: 0.171600s 
Duration: 0.202801s 

C:\Users\neem\AppData\Local\Programs\Python\Python35-32>python Programs/Test.py 
Duration: 0.171600s 
Duration: 0.202800s 

C:\Users\neem\AppData\Local\Programs\Python\Python35-32>python Programs/Test.py 
Duration: 0.171600s 
Duration: 0.187200s 

C:\Users\neem\AppData\Local\Programs\Python\Python35-32>python Programs/Test.py 
Duration: 0.187200s 
Duration: 0.187200s 

C:\Users\neem\AppData\Local\Programs\Python\Python35-32>python Programs/Test.py 
Duration: 0.187200s 
Duration: 0.140400s 

C:\Users\neem\AppData\Local\Programs\Python\Python35-32>python Programs/Test.py 
Duration: 0.187200s 
Duration: 0.187200s 

C:\Users\neem\AppData\Local\Programs\Python\Python35-32>python Programs/Test.py 
Duration: 0.171600s 
Duration: 0.187200s 

ほとんどの場合、build1はbuild2よりも高速です。しかし、時にはbuild2はbuild1より速く、時には同じ速度を持つこともあります。なぜこれが起こるのですか?

+0

'Fとして(パス)オープンで:リターンf.readlines()' – jonrsharpe

答えて

3

これらの結果は、であり、あなたのCPUが(おそらく)他のこともしていると考えれば、ほとんど一貫しています。この事実は、各「テストコード」を一度に実行したため、タイミングが無関係になります。

これらのテストを実行するには、timeitを使用する必要があります。これはコードを何度も実行し、最も速い結果しか出力しないため、より良い比較ができます。

def build1(): 
    seq = [] 
    fin = open('words.txt') 
    for line in fin: 
     word = line.strip() 
     seq.append(word) 
    fin.close() 
    return seq 

def build2(): 
    seq = [] 
    fin = open('words.txt') 
    for line in fin: 
     word = line.strip() 
     seq += [word] 
    fin.close() 
    return seq 


import timeit 
print(timeit.Timer(build1).repeat(number=1000)) 
print(timeit.Timer(build2).repeat(number=1000)) 

これはbuild1build2 1000倍を実行し、各機能の3最高を返します。これらの結果は、あなたが見たものよりも一貫しており、build1はほぼ常にbuild2より速くなっています。これらのテストには10​​24行のテキストファイルを使用しました。

[0.538437745654897, 0.5233988257550134, 0.523436147804647] 
[0.5738405088861467, 0.5879328483021968, 0.574590215558163] 

みましょう時間にそれを行うための正しい方法:

def fast(): 
    with open('words.txt') as f: 
     return [line.strip() for line in f.readlines()] 

import timeit 
print(timeit.Timer(fast).repeat(number=1000)) 
>> [0.48617474650164105, 0.46462499504316523, 0.45692032442191644] 
関連する問題