我读到可以将函数作为参数传递。但现在我必须测试一个给定的函数,因此使用它,我的问题是:我如何给函数赋予参数?
def bucketMap(key, M):
return key*M
def bucketSort(a, bucketMap, d):
N = len(a)
M = int(N / float(d)) # Anzahl der Buckets festlegen
# M leere Buckets erzeugen
buckets = [[] for k in xrange(M)]
# Daten auf die Buckets verteilen
for k in xrange(len(a)):
index = bucketMap(a[k].key, M) # Bucket-Index berechnen
buckets[index].append(a[k]) # a[k] im passenden Bucket einfuegen
# Daten sortiert wieder in a einfuegen
start, end = 0, len(buckets[0]) # Anfang und Ende des ersten Buckets
for k in xrange(M):
insertionSort(buckets[k]) # Daten innerhalb des Buckets sortieren
a[start:end] = buckets[k] # Daten an der richtigen Position in a einfuegen
start = end # Anfang und Ende fuer das naechste Bucket
end += len(buckets[k]) # aktualisieren
所以,让我说我现在有一个数组a,我想用bucketSort排序我的数据。 我怎么称呼它? 我不能只说:
result = bucketSort(a, bucketMap(), d)
因为如果我在那里拨打bucketMap()
,我必须提供参数,但我不想这样做,因为bucketMap()
中的每个元素都必须m
这是在bucketSort
完成的。
答案 0 :(得分:1)
您正尝试将函数调用的返回值传递给bucketSort
,而不是函数本身。只需使用
result = bucketSort(a, bucketMap, d)
顺便说一句,由于bucketMap
只是将其参数相乘,因此您不需要定义新函数;请改用operator.mul
。
import operator
result = bucketSort(a, operator.mul, d)
如果你真的想要一个特定的名字(为了便于阅读),你可以做一个任务。
import operator
bucketMap = operator.mul
result = bucketSort(a, bucketMap, d)