函数与其他函数的参数

时间:2014-03-25 09:03:01

标签: python

我该如何创建这样的东西:

def test(a)
    return a

def invoker(func):
    func() #here I need call the function twice and sum result (test function)

invoker(test(10), test(15))

2 个答案:

答案 0 :(得分:2)

我认为您需要的是任意参数列表:http://docs.python.org/dev/tutorial/controlflow.html#arbitrary-argument-lists

def test(a):
    return a

def invoker(*args):
    print sum(args) # Prints 25
    print args # Prints (10, 15)

invoker(test(10), test(15))

答案 1 :(得分:1)

在Python3中:

from functools import reduce
from operator import add
def add_many(func, *args):
    return reduce(add, map(func, args))

Simplified(信用转到mbatchkarov):

def add_many(func, *args):
    return sum(map(func, args))

func是一个带有一个参数的回调,args是该回调使用的值列表。 map内置根据func转换args。 reduce用作Lisp类语言中的前缀运算符(+ 1 2 3 4)= 1 + 2 + 3 + 4,与reduce相同。 add只是一个回调形式的+运算符。

更通用的版本(Python3):

from functools import reduce
def invoker(func, op, *args):
    return reduce(op, map(func, args))

像这样打电话(例如):

from operator import add
invoker(lambda x:x, add, 10, 15)  # returns 25