函数作为函数参数

2024-09-30 18:28:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我读到有可能传递一个函数作为参数。但是现在我必须测试一个给定的函数并使用它,我的问题是:我如何给这个函数参数?你知道吗

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

假设我现在有一个数组,里面有我想要用bucketSort排序的数据。 我怎么称呼它? 我不能说:

result = bucketSort(a, bucketMap(), d)

因为如果我在那里调用bucketMap(),我必须给出参数,但我不想这样做,因为它必须为m中的每个元素都做bucketMap(),这是在bucketSort中完成的。你知道吗


Tags: key函数inforlenbucketstartend
1条回答
网友
1楼 · 发布于 2024-09-30 18:28:20

您试图将函数调用的返回值而不是函数本身的返回值传递给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)

相关问题 更多 >