Python timeit导入函数中的变量

2024-09-28 21:55:08 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我尝试在Python中使用timeit/Timer函数来计时bruteforce aglorithm和更高效的nlogn版本之间的差异。我的问题是时间问题。你知道吗

from timeit import Timer
import timeit
def BruteForce(A, u):
       for z in A:
            if u-z in A:
                return u, z
        return False

def BinarySearchAlgo(A, u):
    A.sort()
    for z in A:
        if BinarySearch(A, u-z) is True:
            return u, z
    return False

def BinarySearch(list, item):
    if len(list)==0:
        return False
    else:
        midpoint = len(list)//2
        if list[midpoint] == item:
            return True
        elif item < list[midpoint]:
            return BinarySearch(list[:midpoint], item)
        else:
            return BinarySearch(list[midpoint+1:], item)

def tests():
    TestFiles = ['listNumbers-10.txt', 'listNumbers2-10.txt','listNumbers-  100.txt','listNumbers2-100.txt','listNumbers-1000.txt','listNumbers2-   1000.txt','listNumbers-10000.txt','listNumbers2-10000.txt','listNumbers-    100000.txt','listNumbers2-100000.txt','listNumbers-1000000.txt','listNumbers2-  1000000.txt']
    for File in TestFiles:
        results = []
        print("The following are timing tests for the file: ", File)
        with open(File) as inputfile:
            for line in inputfile:
                results.append(int(line.strip()))
        TestNumbers =   [len(results)%2,len(results)%5,len(results)%13,len(results)%99, len(results)%209, len(results)%317, len(results)%464, len(results)%892, len(results)%777]
        for n in TestNumbers:
            BruteForceTime = Timer("BruteForce(results, n)", "from __main__ import BruteForce").timeit()
            BinarySearchTime = Timer("BinarySearchAlgo(results, n)", "from __main__ import BinarySearchAlgo").timeit()

            print("Test Number = ", n, "Brute Force Algo time = ", BruteForceTime, "Binary Search Algo time = ", BinarySearchTime)

在下面的两行中,每当我调用tests()函数时,我都会得到一个错误,即没有定义结果和n。我的问题是如何将它们导入到计时器参数中,以便定义它们。你知道吗

BruteForceTime = Timer("BruteForce(results, n)", "from __main__ import BruteForce").timeit()
BinarySearchTime = Timer("BinarySearchAlgo(results, n)", "from __main__ import BinarySearchAlgo").timeit()

提前谢谢你的帮助


Tags: infromimporttxtforlenreturnresults