如何解决Python:“列表”对象不可调用
有如下代码比较冒泡排序和快速排序的时间:
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
如何将带有列表的函数传递给计时器函数?我试过 *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)
在您的代码中,您在调用 timer
时评估排序函数。结果是一个列表(从排序函数返回),然后传递给 timer
。因此出现错误:您试图将该列表用作 timer
中的函数。
在上面的代码中,函数和数据作为两个单独的参数传递。函数是 Python 中的一等对象,可以像任何变量一样传递给其他函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。