函数作为函数参数 - Python

时间:2014-06-04 16:16:54

标签: 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 = [[] 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完成的。

1 个答案:

答案 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)