Python 通过接受集合和返回集合,将两个函数重构为一个

Python 通过接受集合和返回集合,将两个函数重构为一个,python,refactoring,python-2.7,set,Python,Refactoring,Python 2.7,Set,我有两个函数,它们根据输入字典计算不同的统计数据,例如max、min、sum、average、median 我希望将所有这些函数组合成一个函数,而不是用不同的方法。因此,调用者可以执行以下操作: (minValue, averageValue, maxValue) = myFunction(min, avg, max, data, key, ...) 或 我是python新手,我试图理解如何使用集合来实现这一点! 请不要建议其他解决这个问题的方法,因为我也在尝试学习python和python语

我有两个函数,它们根据输入字典计算不同的统计数据,例如max、min、sum、average、median

我希望将所有这些函数组合成一个函数,而不是用不同的方法。因此,调用者可以执行以下操作:

(minValue, averageValue, maxValue) = myFunction(min, avg, max, data, key, ...)

我是python新手,我试图理解如何使用集合来实现这一点! 请不要建议其他解决这个问题的方法,因为我也在尝试学习python和python语法。举个小例子就好了

def myFunction(data,*args):
    return tuple( f(data) for f in args) )
例如:

myFunction(data, min, avg, max)
# returns (min(data), avg(data), max(data)), and you can get them by
minValue, averageValue, maxValue = myFunction(data, min, avg, max)
myFunction2(['a','bc','f'], min, max)          # ('a', 'f')
myFunction2(['a','bc','f'], min, max, key=len) # ('a', 'bc')
如果要包括

def myFunction2(data, *args, **kwargs):
    if 'key' not in kwargs:
        kwargs['key'] = lambda x: x # identity map (pass without a key)
    return tuple( f(data, key=kwargs['key']) for f in args )
例如:

myFunction(data, min, avg, max)
# returns (min(data), avg(data), max(data)), and you can get them by
minValue, averageValue, maxValue = myFunction(data, min, avg, max)
myFunction2(['a','bc','f'], min, max)          # ('a', 'f')
myFunction2(['a','bc','f'], min, max, key=len) # ('a', 'bc')

不能使用集合来执行此操作,因为集合没有排序;例如,Python不知道哪个值是
minValue
,哪个
maxValue

您可以返回元组,但:

return value1, value2, value3
演示:


如何实现任意数量的输入?