函数作为函数参数-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],因此给我的代码是错误的。。。有时候,我要花很长时间才能认识到最愚蠢的错误。