Python:';列表';对象不可调用
使用以下代码比较气泡排序和快速排序的时间:Python:';列表';对象不可调用,python,sorting,encapsulation,Python,Sorting,Encapsulation,使用以下代码比较气泡排序和快速排序的时间: def makeArray(groesseArray, stellenZahlen): array = groesseArray * [None] for i in range(0,groesseArray): array[i] = randint(0,10**stellenZahlen) return array 制作数组 def bubble(arr): n = len(arr) for i
def makeArray(groesseArray, stellenZahlen):
array = groesseArray * [None]
for i in range(0,groesseArray):
array[i] = randint(0,10**stellenZahlen)
return array
制作数组
def bubble(arr):
n = len(arr)
for i in range(n - 1):
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
#print(arr)
气泡排序算法
def quick(arr):
n = len(arr)
high = []
low = []
if n <= 1:
return arr
else:
pivot = arr.pop()
for i in arr:
if i > pivot:
high.append(i)
else:
low.append(i)
return quick(low) + [pivot] + quick(high)
def timer(func(arr)):
start = time.time()
func(arr)
end = time.time()
print(end - start)
计时器功能,用于测量算法的时间
testArray = makeArray(500, 5)
timer(quicksort.quick(testArray))
timer(bubblesort.bubble(testArray))
哪个是投掷
Traceback (most recent call last):
File "C:\Users\user\PycharmProjects\Algo\compare.py", line 30, in <module>
timer(quicksort.quick(testArray))
File "C:\Users\user\PycharmProjects\Algo\compare.py", line 14, in timer
func(arr)
TypeError: 'list' object is not callable
回溯(最近一次呼叫最后一次):
文件“C:\Users\user\PycharmProjects\Algo\compare.py”,第30行,在
计时器(快速排序。快速(testArray))
文件“C:\Users\user\PycharmProjects\Algo\compare.py”,第14行,在计时器中
func(arr)
TypeError:“列表”对象不可调用
如何将带有列表的函数传递到计时器函数中?我试过*args,**kwargs希望这是解决方案,但被抛出了同样的错误
提前感谢将计时器功能更改为
def timer(func, arr):
start = time.time()
func(arr)
end = time.time()
print(end - start)
并称之为:
timer(quicksort.quick, testArray)
timer(bubblesort.bubble, testArray)
在代码中,您可以在调用计时器
时计算排序函数。结果是一个列表(从排序函数返回),然后将其传递给计时器
。因此出现了错误:您试图将该列表用作计时器中的函数
在上面的代码中,函数和数据作为两个独立的参数传递。函数是Python中的一级对象,可以像任何变量一样传递给其他函数。您的代码在def timer(func(arr))处抛出语法错误:
trydef timer(func,arr):
@leaf\u yakitori只解决了一半问题。