函数作为函数参数-Python
我读到可以将函数作为参数传递。但是现在我必须测试一个给定的函数并使用它,我的问题是:我如何给函数参数函数作为函数参数-Python,python,function,arguments,Python,Function,Arguments,我读到可以将函数作为参数传递。但是现在我必须测试一个给定的函数并使用它,我的问题是:我如何给函数参数 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 = [[] fo
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()
,我必须给出参数,但我不想这样做,因为它必须对m
中的每个元素执行bucketMap()
,这是在bucketSort
中执行的,您试图传递的是函数调用的返回值,而不是函数本身,到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)
好吧,当我尝试它时,它没有成功——可能是因为它在单元测试中。编译器认为bucketMap是一个浮点。我的单元测试是这样的:
import unittest class Test(unittest.TestCase):a=createData(100)#创建一个数组,其中100个随机数介于0和1之间result=bucketSort(a,bucketMap,5)如果
bucketMap的点现在看起来很无用,但是我以后必须添加一个更好的bucketMap,它还提供了编辑bucketMap的机会,而无需查看bucketSort。不过,如果我必须选择,我只需将所需的乘法运算放入bucketSort即可我仍然存在以下错误:“float”异议没有“key”属性,无论我如何尝试修复它。这有什么建议吗?a
包含什么?您的代码假设每个元素都是一个具有key
属性的对象,但显然不是这样。我错过了您的注释,是自己发现的。是的,a[k]键必须是a[k],因此给我的代码是错误的。。。有时候,我要花很长时间才能认识到最愚蠢的错误。