0

func_apply(func_name, **kwargs)および パラメータ値をリストで受け取り、func_nameパラメータを 1 つずつ に適用しfunc_name、結果を収集してリストとして返す関数を作成しようとしました。func_apply私のアプリケーションでは、さまざまなパラメーター値をさまざまな関数に適用し、結果をバッチで収集する必要があることが多いため、主に構文を抽象化する ために、この高次関数が必要です。

def my_minus(x,y):
    return x-y

def my_divd(a,b):
    return a/b

def func_apply(func_name, **kwargs):
    '''apply the parameter in kwargs one by one to func_name,
       collect and return result in a list.
       for example: 
         func_apply(my_minus, x=[2, 4, 5, 7], y=[1, 4, 3, 9]) will return [1,0,2,-2], 
         func_apply(my_divd,  a=[2, 4, 5, 7], b=[1, 4, 3, 9]) will return [2,1,1.66,0.77]
    '''
    # the codes

それで、どのように書くのfunc_applyですか?

4

1 に答える 1

3

zipとを使用できますlist comprehension

kwargsここでは辞書です。辞書には固定された順序がないため、最初にキーに基づいてソートされた値のリストを取得する必要がある場合があります。

>>> from __future__ import  division   # not required in py3.x
def func_apply(func_name, **kwargs):
    vals = [kwargs[key] for key in sorted(kwargs)] #sort the keys lexicographically
    return [func_name(*x) for x in  zip(*vals)]
... 
>>> func_apply(my_minus, x=[2, 4, 5, 7], y=[1, 4, 3, 9])
[1, 0, 2, -2]
>>> func_apply(my_divd,  a=[2, 4, 5, 7], b=[1, 4, 3, 9])
[2.0, 1.0, 1.6666666666666667, 0.7777777777777778]
于 2013-06-22T10:17:44.610 に答える