列表对象不可调用调用其参数也是具有数组的函数的函数

list object not callable calling a function whose parameter is also a function with an array

你能帮忙解决以下问题吗?

Error: Traceback (most recent call last):
  File "/Users/isabella/Desktop/GMIT/Algorithms/CTA_Project/main.py", line 186, in <module>
    timeAlgo(insertionSort(arr))
  File "/Users/isabella/Desktop/GMIT/Algorithms/CTA_Project/main.py", line 179, in timeAlgo
    algo()
TypeError: 'list' object is not callable
# Implementation of Insertion Sort algorithm | Ref: [1]
def insertionSort(arr):
    
    # Iterates over elements in the given arr starting at index 2
    for i in range(1, len(arr)):
        
        while arr[i - 1] > arr[i] and i > 0:
            arr[i - 1], arr[i] = arr[i], arr[i - 1]
            i -= 1  # Moves down one index
    
    return arr

# Times algorithm
def timeAlgo(algo):
    # Starts timing
    start = time.time()
    # Executes algorithm
    algo()
    # Ends timing
    end = time.time()
    totalTime = end - start
    return totalTime

arr = genRandomArr()
timeAlgo(insertionSort(arr))

你可以把测量执行时间的函数做成装饰器

from functools import wraps
import time


def timeAlgo(func):
    @wraps(func)
    def wrapper(*args):
        start = time.time()
        res = func(*args)
        end = time.time()
        print(f'{end - start} seconds')
        return res

    return wrapper


@timeAlgo
def insertionSort(arr):
    
    # Iterates over elements in the given arr starting at index 2
    for i in range(1, len(arr)):
        
        while arr[i - 1] > arr[i] and i > 0:
            arr[i - 1], arr[i] = arr[i], arr[i - 1]
            i -= 1  # Moves down one index
    
    return arr

print(insertionSort([2,4,6,1,0]))

import time

def insertionSort(arr):
    
    # Iterates over elements in the given arr starting at index 2
    for i in range(1, len(arr)):
        
        while arr[i - 1] > arr[i] and i > 0:
            arr[i - 1], arr[i] = arr[i], arr[i - 1]
            i -= 1  # Moves down one index
    
    return arr


def timeAlgo(algo, *args):
    # Starts timing
    start = time.time()
    # Executes algorithm
    algo(*args)
    # Ends timing
    end = time.time()
    totalTime = end - start
    return totalTime

arr = [2,4,6,1,0]
timeAlgo(insertionSort, arr)

适当推迟执行:

timeAlgo(lambda: insertionSort(arr))