我该如何创建这样的东西:
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))
答案 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